時刻の取り扱いが冗長

  • 元タイトル: 時刻の取り扱いについて
  • ページ: BugTrack2
  • 投稿者: mok?
  • 優先順位: 低
  • 状態: 提案
  • カテゴリー: その他
  • 投稿日: 2005-06-03 (金) 09:33:56
  • バージョン: 1.4.5

関連

メッセージ

init.phpでdefine('UTIME', time() - LOCALZONE)とUTIMEを定義し、各所で使っているようですが、time()は元々、(同一時点においては)サーバが設置されている場所によらず同一の値でありこの補正は不要です。 UTIMEをベースにデータ処理を行っている個所全般に見直す必要がありそうです。
PukiWiki Plus!のPlugin/minicalendarの2005-5-29のコメントあたりが発端です。

  • 参考の実験結果: foo.php:
    time: <?php echo time();?>
    date: <?php echo date('r');?>
    を作って、
    TZ=Asia/Tokyo php -f foo.php; TZ=Europe/Paris php -f foo.php
    とか実行しました。結果は以下のとおり。
    time: 1117637288
    date: Wed, 01 Jun 2005 23:48:08 +0900
    time: 1117637288
    date: Wed, 01 Jun 2005 16:48:08 +0200
    timeの値は同じですがdateの値が変化してるので、PHPはローカルタイムゾーンを東京とパリだと認識していると思います。
  • PHPのマニュアルのdate()はかなりまぎらわしいです。

指定された引数 timestamp を、与えられた フォーマット文字列によりフォーマットし、日付文字列を返します。 タイムスタンプが与えられない場合は、現在のローカル時刻が使われま す。つまり、timestampはオプションであり そのデフォルト値はtime()の値です。

と書いてありますが、time()の値はローカルとかそういう概念は関係なく、1970/1/1 00:00:00 GMT(これはある特定の瞬間)からの秒数なので、サーバの設置場所や設定によらず同一時点では同一値となります(UNIX/Linux の time()と同じ)。

  • すなわち、time()の値は世界中で共通の値ですが、date()がその値を日付に変換する際にサーバが設置してあるローカルなタイムゾーンを考慮しています。time()値と日付(YYYY/MM/DD)の変換を行う関数を使っている個所は要注意だと思います。date(),getdate(),localtime(),mktime()等々。

  • はい。ここ、ハマりますね。わたしも別のプラグインを作ったときに見事にハマりました。time は unixtime ですので、位置に関係なく定義されているものです。TZ 環境変数などで制御するように変更するのがよいかどうか、つきつめては考えていませんが、少なくとも、現状の作りが紛らわしい実装になっているのは確かです。 -- kawai? 2005-06-06 (月) 11:34:10
  • 事実として UTIME は、time() - date('Z') なわけですから、この値は何?ということですよね。これは、はまりますよねぇ。 -- upk 2005-06-07 (火) 01:26:10
  • なるほど、微妙ですね (^^; -- teanan 2005-06-07 (火) 02:37:52
  • 現状の UTIME の値は "UTC" ではなくて、"ローカルタイムを返す関数" にタイムスタンプとして渡すと "UTC" が得られる "何らかの値"、という解釈でよろしいのですかね。 > プラグイン/開発者向け#l5b11d6b -- moku? 2007-11-09 (金) 00:28:39
  • いずれにせよ、JSTなサーバ環境でしか通用しない値と理解して下さい。 -- 2007-11-09 (金) 04:16:35


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-11-09 (金) 04:16:36
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.259 sec.

OSDN