php mktime在同一日期给出了不同的结果?

时间:2012-08-30 09:47:42

标签: php mktime

以下代码:

    // settings 1st alternative
    $season = 2011;
    $startweek = 36;

    // calculation, 1st alternative
    // in any case Jan 1st is in 1. week
    $firstweekuniversal = mktime(0,0,0,1,4,$season);
    // I'd like to calculate monday 0:00 of the given week.
    // date(...) computes to monday of the calculated week.
    $startday1 = $firstweekuniversal + 86400 * (7*($startweek-1) - date('w', $firstweekuniversal)+1);

    // settings 2nd alternative
    $StartingDate = "KW36 - 5.09.2011 (Mo)";

    // calculation, 2nd alternative
    $firstparts = explode(" ", $StartingDate);
    $secparts = explode(".", $firstparts[2]);
    $startday2 = mktime(0,0,0,intval($secparts[1]),intval($secparts[0]),intval($secparts[2]));

    // Output
    echo "Start: \$startday1=".$startday1.", Timestamp=\"".date("d.m.Y - H:i:s", $startday1)."\"<br>\n";
    echo "Start: \$startday2=".$startday2.", Timestamp=\"".date("d.m.Y - H:i:s", $startday2)."\"<br>\n";

导致此输出:

Start: $startday1=1315177200, Timestamp="05.09.2011 - 01:00:00"
Start: $startday2=1315173600, Timestamp="05.09.2011 - 00:00:00"

1h的差异来自哪里?它不能是夏季问题,在这种情况下,1h必须反过来,或者我错了? 当我尝试使用我的环境(localhost)时没有区别,但是在我的prvider的服务器上有。

任何人都可以向我解释这个吗?我在这里完全不解。 提前谢谢,

1 个答案:

答案 0 :(得分:0)

我对夏令时的理解是,在冬季和夏季之间的某个时刻,太阳开始提前升起,所以在早上8点它会感觉它应该是早上9点......而这正是时钟的作用,它会移动向后转发(通常为一小时)。这也是为什么在学校迟到这么好的原因:)。

在任何情况下,本地php的时区设置可能是UTC(或其他一些“中性”时区),但服务器时区设置可以保证夏令时。