- 追加された行はこの色です。
- 削除された行はこの色です。
*時刻の扱い
*時刻の扱い [#c04326c0]
-ページ: BugTrack
-投稿者: [[ぱんだ]]
-優先順位: 低
-状態: 提案
-状態: 完了
-カテゴリー: 本体新機能
-投稿日: 2002-11-30 (土) 16:41:38
-バージョン:
-バージョン:
**メッセージ
**メッセージ [#w34e8585]
PukiWiki内部で扱う時間(UNIXタイムスタンプ)をGMTに一本化し、書式化するときにローカル時間に変換する仕掛けを考えています。
***pukiwiki.ini.phpにZONETIME定数を追加(ローカル時間)
define('ZONETIME',9 * 3600); // JST = GMT+9
***init.phpにLOCALZONE定数を追加(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とする
***内部で扱う数値(UNIXタイムスタンプ)はすべてGMTとする [#v9b55244]
-init.php
-define('UTIME',time())
+define('UTIME',time() - LOCALZONE)
-その他のスクリプト
time()ではなくUTIMEを使うことが望ましい
-time()
+UTIME
どうしてもその瞬間の時間が欲しいときはLOCALZONEを引いておく
-time()
+time() - LOCALZONE
ファイルの時間を得るときにLOCALZONEを引く
-filemtime("...")
+filemtime("...") - LOCALZONE
***UNIXタイムスタンプを書式化するときに、ZONETIMEを加える
mktime()関数はLOCALZONEを引く(calendar*.inc.php内)
-mktime(.....)
+mktime(.....) - LOCALZONE
***UNIXタイムスタンプを書式化するときに、ZONETIMEを加える [#qa23f5b5]
-date()関数
-date("...")
+date("...",UTIME + ZONETIME)
+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)].')';
**format_date
そこら中に散らばっている日時書式化ルーチンを関数にしてしまう
-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);
}
----
#comment
-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