TAMURA Toshihiko
tamur****@bitsc*****
2003年 1月 15日 (水) 10:08:47 JST
こんにちは、田村です。 Masahiko Nagata <nagat****@ideas*****> wrote: > こちらのサーバーでハードウェア時間を1970年01月15日とかに設定して(システム時 > 間は現時間のまま)、メンバー新規登録をしてみましたところ、1970/01/01以降の生 > 年月日は正常に入力できましたが、1960/01/01は見事に1970/01/01になってしまいま > した。 > この状態でMySQLの顧客テーブルに記録されている生年月日(customers_dob)を確認 > すると、1960/01/01となっていました。 > > この状態から、システム時間とハードウェア時間を正確な日付に戻しても(年の為サー > バー再起動)、やはり1970/01/01と表示されたままとなります。 > > # MySQLの顧客テーブルに記録されている日付は1960/01/01となっています。 osCommerceの顧客の生年月日は、永田さんが書かれているように、 単純にテキストでデータベースに記録されています。 ただ、その日付を表示するときに、catalog/includes/general.php の関数 tep_date_short() を利用します。 その中で日付の表示形式を作るのにPHPの date() 関数を呼んでいます。 この date() 関数もOSの機能を利用しているんでしょうから、 日付が正常に表示されないのはOSの設定の問題なんですね。 # でも、こんな現象が起こるとは意外でした。 それで、OSの設定に関係なく無理やり修正するとしたら、 ---------------------------------------- return date(DATE_FORMAT, mktime($hour, $minute, $second, $month, $day, $year)); ---------------------------------------- の部分を、 ---------------------------------------- return $year.'/'.$month.'/'.$day; ---------------------------------------- のように書き換えてしまう方法があると思います。 > で、もしサーバーが上記の状態だとした場合の戻し方なのですが.... > うーん、サーバーの電源を落として再起動しても1970/01/01と強制的に表示される様 > になってしまいました....(^^;) えーと、困りましたね。 setclock コマンドを使ったらどうでしょうか? -- 田村敏彦 / 株式会社ビットスコープ E-mail:tamur****@bitsc***** http://www.bitscope.co.jp/