3

こんにちは、php の date() 関数で奇妙な動作が発生しています。私はそのように1週間ずつ日付を増やしようとしています。

コード:

<?php
    date_default_timezone_set('Europe/London');
    echo 7*24*60*60;
    echo '<br>';
    echo date('d/m/Y H:i:s', 0);
    echo '<br>';
    echo date('d/m/Y H:i:s', 604800);
?>

次の出力が得られます。

出力:

604800
01/01/1970 01:00:00
08/01/1970 01:00:00

これは予想どおりで、日付が 7 日ずつ 1 秒ずつ増えています。しかし、特定の秒数に達すると、日付機能が日付から 1 時間ずれているように見えます。

コード:

<?php
    date_default_timezone_set('Europe/London');
    echo (1351468800 - 1350864000);
    echo '<br>';
    echo date('d/m/Y H:i:s', 1350864000);
    echo '<br>';
    echo date('d/m/Y H:i:s', 1351468800);
?>

次の出力が得られます

出力:

604800
22/10/2012 01:00:00
29/10/2012 00:00:00

ご覧のとおり、2 つの日付の差は 604800 秒ですが、日付は 1 時間を失っています。これを 2 つの異なるサーバーでテストし、DateTime オブジェクトを使用して同様のコードをテストしましたが、結果は同じでした。どこが間違っていますか?

4

2 に答える 2

5

ここで DST が登場すると思います。ロンドンでは 2012 年 10 月 28 日に DST が終了します。

于 2012-09-26T16:30:31.260 に答える
3

strtotimeより信頼性の高い使用

date_default_timezone_set('Europe/London');
$startDate  = "1350864000" ;
$senvenDays = strtotime("+7 day", $startDate);
var_dump(date("d/m/Y H:i:s",$startDate));
var_dump(date("d/m/Y H:i:s",$senvenDays));
var_dump($senvenDays - $startDate);

出力

string '22/10/2012 01:00:00' (length=19)
string '29/10/2012 01:00:00' (length=19)
int 608400
于 2012-09-26T16:35:33.293 に答える