PukiWiki内部で扱う時間(UNIXタイムスタンプ)をGMTに一本化し、書式化するときにローカル時間に変換する仕掛けを考えています。
define('ZONE','JST'); define('ZONETIME',9 * 3600); // JST = GMT + 9 //define('ZONE','EST'); PukiWikiをアメリカ東部標準時間(EST)で使う場合の例 //define('ZONETIME',-5 * 3600);
もし、PukiWikiをアメリカで使う、などという場合は、夏時間(EDT)との切替は手動…ということで :)
define('LOCALZONE',date('Z'));
-define('UTIME',time()) +define('UTIME',time() - LOCALZONE)
-time() +UTIMEどうしてもその瞬間の時間が欲しいときはLOCALZONEを引いておく
-time() +time() - LOCALZONEファイルの時間を得るときにLOCALZONEを引く
-filemtime("...") +filemtime("...") - LOCALZONEmktime()関数はLOCALZONEを引く(calendar*.inc.php内)
-mktime(.....) +mktime(.....) - LOCALZONE
-date("...") +get_date("...") get_date()関数は下記
-getdate() +getdate(UTIME+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)].')';
-getdate(mktime(0,0,0,$m,$d,$y)); +getdate(mktime(0,0,0,$m,$d,$y) - LOCALTIME + ZONETIME);
// 日時文字列を作る 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; }
// 日時を得る 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); }