*時刻の扱い [#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

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 5.525 sec.

SourceForge