*時刻の扱い -ページ: BugTrack -投稿者: [[ぱんだ]] -優先順位: 低 -状態: 提案 -カテゴリー: 本体新機能 -投稿日: 2002-11-30 (土) 16:41:38 -バージョン: **メッセージ PukiWiki内部で扱う時間(UNIXタイムスタンプ)をGMTに一本化し、書式化するときにローカル時間に変換する仕掛けを考えています。 ***pukiwiki.ini.phpにZONETIME定数を追加(ローカル時間) define('ZONETIME',9 * 3600); // JST = GMT+9 ***init.phpにLOCALZONE定数を追加(GMTと''サーバの''ローカル時間との差) define('LOCALZONE',date('Z')); ***内部で扱う数値(UNIXタイムスタンプ)はすべてGMTとする -init.php -define('UTIME',time()) +define('UTIME',time() - LOCALZONE) -その他のスクリプト time()ではなくUTIMEを使うことが望ましい -time() +UTIME どうしてもその瞬間の時間が欲しいときはLOCALZONEを引いておく -time() +time() - LOCALZONE ファイルの時間を得るときにLOCALZONEを引く -filemtime("...") +filemtime("...") - LOCALZONE getdate()関数はgetdate(UTIME)に -getdate() +getdate(UTIME) ***UNIXタイムスタンプを書式化するときに、ZONETIMEを加える -date()関数 -date("...") +get_date("...") get_date()関数は下記 -日付文字列を作るとき(よくあるパターン) + $val += ZONETIME; $ins_date = date($date_format,$val); $ins_time = date($time_format,$val); $ins_week = '('.$weeklabels[date('w',$val)].')'; **そこら中に散らばっている日時書式化ルーチンを関数にしてしまう -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; return date($format,$time); } ---- #comment