ホームページ  >  記事  >  バックエンド開発  >  PHPの日付処理関数とうちょめの関数_coomonで日付処理関数を調べる_PHPチュートリアル

PHPの日付処理関数とうちょめの関数_coomonで日付処理関数を調べる_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:32:06964ブラウズ

コードをコピーします コードは次のとおりです:

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

コードを見てくださいコードは次のとおりです。 );
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 月、11 時 25 分、9 月 5 日日曜日、1283657100、array(11) {
["秒"]=>
int(9)
["分"]=>
["時間"]=> ;
int(11)
["月"]=>
int(5)
["月"]=>
[ "年"]=>
["yday"]=>
string(6) "日曜日"
["月"]= >
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(空 ($timestamp)) {
$timestamp = $_SGLOBAL['timestamp'];
}
$timeoffset = strlen($_SGLOBAL['member']['timeoffset'])>0?intval($_SGLOBAL) ['メンバー ']['タイムオフセット']):intval($_SCONFIG['タイムオフセット']);
$result = ''
if($format) {
$time = $_SGLOBAL['タイムスタンプ'] - $タイムスタンプ;
if($time > 24*3600) {
$result = gmdate($dateformat, $timestamp + $timeoffset * 3600);
} elseif ($time > 3600) {
$result = intval($時間/3600 ).lang('時間').lang('前'); } elseif ($time > 60) { $result = intval($time/60).lang('分').lang ('前'); elseif ($time > 0) { $result = $time.lang('秒').lang('前'); '); }
} else {
$result = gmdate($dateformat, $timestamp + $timeoffset * 3600);
}
return $result


if($format; ){}, まず、システムの現在時刻と渡した時刻 (通常はデータベース内の時刻、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)); "M d Y H:i:s", mktime(0, 0, 0, 1, 1, 1998));


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



コードをコピーします

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


//String time
function sstrtotime($string) {
global $_SGLOBAL, $_SCONFIG;時間 = '';
if($string) {
$time = strtotime($string);
if(gmdate('H:i', $_SGLOBAL['timestamp'] + $_SCONFIG['timeoffset'] * 3600 ) != date('H:i', $_SGLOBAL['timestamp'])) {
$time = $time - $_SCONFIG['timeoffset'] * 3600;
} } return $time;
この機能は非常に少ない機能ですが、非常に見にくいです。これは、時刻文字列をタイムスタンプに変換するためです。たとえば、ここで入力したのは 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 を減らす必要があります。しかし、もう一度言いますが、これは一体何を意味するのでしょうか?

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/322864.html技術記事次のようにコードをコピーします。 ?php echo time(); echo mktime(11,25,0,9,5,2010);//echo mktime(0,0,0,1) と同じです。 、1,1970); ここでの出力は 1283657290,...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。