ホームページ >php教程 >php手册 >phpの日付処理関数とuchomeのfunction_coomonの日付処理関数の研究

phpの日付処理関数とuchomeのfunction_coomonの日付処理関数の研究

WBOY
WBOYオリジナル
2016-06-13 12:11:54774ブラウズ

コードをコピー コードは次のとおりです。


echo microtime();
echo mktime(0,0,0,1,1,1970);と同じです。 >

ここでの出力は 1283657290、1283657100、0.88533200 1283657290、-25200 です。最後の値から判断すると、ここで返されたタイムスタンプはタイム ゾーンによって調整されていることがわかります。これは、私が中国にいたときの 1970 年 1 月 1 日の 0 時であり、まだ 0 時に達していません。ここでの時間は負の数になり、全体の値は -8*3600 に等しくなります。

もう一度見てください



コードをコピーします

コードは次のとおりです: echo date ( "H i l d F" ,1283657100);

echo gmdate("H i l d F",1283657100);
echo strftime("%Hh%M %A %d %b" ,1283657100);
/ /strftime() は、特殊な書式設定文字の前にパーセント記号 % を付ける必要があることを除いて、date() と同様に機能します。
echo strtotime("2010-9-5 11:25:00");
var_dump(getdate (time()));


出力は 11 25 9 月 5 日日曜日、03 25 9 月 5 日日曜日、11 時 25 分、9 月 5 日日曜日、1283657100、array(11) {
["秒"]=>
int(9)

[" 分"]=>
int(39)
["hours"]=>
int(11)
["mday"]=>
int(5)
["wday"]=>
int(0)
["mon"]=>
["year"]=> 2010)
["yday"]=>
int(247)
["weekday"]=>
string(6) "日曜日"
["month"]= >
string(9) " September"
[0]=>
int(1283657949)
}

主に 3 番目の出力を見てください。中国のグリニッジの時刻は 2010 年 9 月 5 日の 11:25 ですか?ここでは時差も考慮する必要があります。そして、ここでもう 1 つ奇妙なのは、gmdate だけが警告を出さず、残りはシステムのタイムゾーンに依存できないという警告が出ることです。 gmdate はグリニッジ時間のみを計算するため、システムのタイムゾーンが間違っていたとしても、1 回のプラスと 1 回の減算で正常に戻ると想像してください。



コードをコピー

コードは次のとおりです:

//時刻の書式設定function sgmdate($dateformat, $timestamp =' ', $format=0) { global $_SCONFIG, $_SGLOBAL; if(empty($timestamp)) {

$timestamp = $_SGLOBAL['timestamp']

}
$timeoffset = strlen($_SGLOBAL['member']['timeoffset'])>0?intval($_SGLOBAL['member']['timeoffset']):intval($_SCONFIG['timeoffset'] );
$result = '';
if($format) {
$time = $_SGLOBAL['timestamp'] - $timestamp; {
$result = gmdate($dateformat, $timestamp $timeoffset * 3600);
} elseif ($time > 3600) {
$result = intval($time/3600).lang('時間' ).lang('前');
} elseif ($time > 60) {
$result = intval($time/60).lang('分').lang('前' );
} elseif ($time > 0) {
$result = $time.lang('second').lang('before');
} else {
$result = lang( 'now');
}
} else {
$result = gmdate($dateformat, $timestamp $timeoffset * 3600);
return $result;まず、システムの現在時刻と渡した時刻 (通常はデータベース内の時刻) を確認します。 2010-9-4 21:00:00 など)。時差が 1 日以内の場合は、2 時間前など、結論が直接導き出されます。1 日を超える場合は、gmdate が呼び出されます。ここだけはわかりません。なぜ date($timestamp) を直接呼び出すのではなく、この奇妙な関数を呼び出すのでしょうか?これは一体どういう意味でしょうか?
gmdate

フィンランド (GMT 0200) で実行すると、以下の最初の行は「Jan 01 1998 00:00:00」を出力し、2 行目は「Dec 31 1997 22:00:00」を出力します。



コードをコピー

コードは次のとおりです。


echo date("M d Y H: i:s ", mktime(0, 0, 0, 1, 1, 1998));
echo gmdate("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 1998) ));
?>

つまり、gmdate は時差を考慮します。数日前ではなく、標準の時刻形式がここに出力されます。 次に、uhome の function_common 内の関数に注目します

コードをコピーします

コードは次のとおりです:


/ /String 時間

function sstrtotime($string) {
global $_SGLOBAL, $_SCONFIG;
if($string) {
$time = strtotime($)文字列) ;

if(gmdate('H:i', $_SGLOBAL['timestamp'] $_SCONFIG['timeoffset'] * 3600) != date('H:i', $_SGLOBAL['timestamp'] )) { $time = $time - $_SCONFIG['timeoffset'] * 3600; } } return

}



この機能は機能が少ないのですが、非常に見にくいです。これは、時刻文字列をタイムスタンプに変換するためです。たとえば、ここで入力したのは 2010 9 4 21:08 です。$time の値は、この時刻から 1970 年 1 月 1 日 00:00:00 GMT までの時差です。考慮すべき時差は次のとおりです。 $_SGLOBAL[''timestamp] の値は実際には $time と同じ方法で計算されますが、値が若干異なる場合があります。 $_SCONFIG['timeoffset'] は構成テーブル内にあり、その現在の値は 8 です。システムのタイムゾーンが正しいか間違っている場合があり、$_SCONFIG['timeoffset'] を通じて確認する必要があります。 gmdate は、受信したタイムスタンプ (プログラムが実行されている場所のタイムスタンプ) をシステムのタイムゾーンに渡して、その時点のグリニッジの時刻を取得します。システムのタイムゾーンが正しく設定されている場合、これはちょうどプラス 1 とマイナス 1 であり、次の値と等しくなります (実際、ここでの $_SGLOBAL[''timestamp] の値は無関係です)。正常であれば $time を変更する必要はありません。異常であれば $time を減らす必要があります。しかし、もう一度言いますが、これは一体何を意味するのでしょうか?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。