*時刻の扱い [#c04326c0] -ページ: BugTrack -投稿者: [[ぱんだ]] -優先順位: 低 -状態: 完了 -カテゴリー: 本体新機能 -投稿日: 2002-11-30 (土) 16:41:38 -バージョン: **メッセージ [#w34e8585] PukiWiki内部で扱う時間(UNIXタイムスタンプ)をGMTに一本化し、書式化するときにローカル時間に変換する仕掛けを考えています。 ***pukiwiki.ini.phpにZONEおよびZONETIME定数を追加(ローカル時間) [#p1b359d6] define('ZONE','JST'); define('ZONETIME',9 * 3600); // JST = GMT + 9 //define('ZONE','EST'); PukiWikiをアメリカ東部標準時間(EST)で使う場合の例 //define('ZONETIME',-5 * 3600); もし、PukiWikiをアメリカで使う、などという場合は、夏時間(EDT)との切替は手動…ということで :) ***init.phpにLOCALZONE定数を追加(GMTと''サーバの''ローカル時間との差) [#ze7e5e08] define('LOCALZONE',date('Z')); ***内部で扱う数値(UNIXタイムスタンプ)はすべてGMTとする [#v9b55244] -init.php -define('UTIME',time()) +define('UTIME',time() - LOCALZONE) -その他のスクリプト time()ではなくUTIMEを使うことが望ましい -time() +UTIME どうしてもその瞬間の時間が欲しいときはLOCALZONEを引いておく -time() +time() - LOCALZONE ファイルの時間を得るときにLOCALZONEを引く -filemtime("...") +filemtime("...") - LOCALZONE mktime()関数はLOCALZONEを引く(calendar*.inc.php内) -mktime(.....) +mktime(.....) - LOCALZONE ***UNIXタイムスタンプを書式化するときに、ZONETIMEを加える [#qa23f5b5] -date()関数 -date("...") +get_date("...") get_date()関数は下記 -getdate()関数はgetdate(UTIME+ZONETIME)に -getdate() +getdate(UTIME+ZONETIME) -getdate(timestamp)はgetdate(timestamp+ZONETIME)に -getdate(timestamp) +getdate(timestamp + ZONETIME) -日付文字列を作るとき(よくあるパターン) + $val += ZONETIME; $ins_date = date($date_format,$val); $ins_time = date($time_format,$val); $ins_week = '('.$weeklabels[date('w',$val)].')'; -calendar*.inc.phpで使われているパターン -getdate(mktime(0,0,0,$m,$d,$y)); +getdate(mktime(0,0,0,$m,$d,$y) - LOCALTIME + ZONETIME); **そこら中に散らばっている日時書式化ルーチンを関数にしてしまう [#tcf9952e] -format_date($val,$paren) --$val : UNIXタイムスタンプ(GMT) --$paren : TRUE:戻り値を括弧で囲む デフォルト=FALSE // 日時文字列を作る function format_date($val, $paren = FALSE) { global $date_format,$time_format,$weeklabels; $val += ZONETIME; $date = date($date_format,$val); $time = date($time_format,$val); $week = '('.$weeklabels[date('w',$val)].')'; $str = "$date $week $time"; return $paren ? "($str)" : $str; } -get_date($format,$timestamp) date()関数の代替 --$format : フォーマット文字列 --$timestamp : UNIXタイムスタンプ(GMT) 省略時は現在の日時 // 日時を得る function get_date($format,$timestamp = NULL) { $time = ($timestamp === NULL) ? UTIME : $timestamp; $time += ZONETIME; $format = preg_replace('/(?<!\\\)T/',preg_replace('/(.)/','\\\$1',ZONE),$format); return date($format,$time); } ---- -mktime()とgetdate()について追記しました。 -- [[ぱんだ]] SIZE(10){2002-12-02 (月) 16:56:14} -タイムゾーンの扱いを追加しました。どうでしょうか。 -- [[ぱんだ]] SIZE(10){2002-12-02 (月) 19:32:13} -[[BugTrack2/76]] -- &new{2005-06-11 (土) 16:11:44}; #comment //#comment