ホームページ >バックエンド開発 >PHPチュートリアル >gamma関数phpの日付処理関数とuchomeのfunction_coomonの日付処理関数の研究

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

WBOY
WBOYオリジナル
2016-07-29 08:44:101061ブラウズ

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


echo mktime(11,25,0,9,5,2010);//time
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) ;
e cho 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)
ここでの出力は 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 を減らす必要があります。しかし、もう一度言いますが、これは一体何を意味するのでしょうか?

以上、ガンマ関数 php の日付処理関数と uchome の function_coomon の日付処理関数についての研究を紹介しました。ガンマ関数の内容も含めて、PHP チュートリアルに興味のある友人の参考になれば幸いです。

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