PHP模拟夏令时

时间:2014-01-21 09:46:05

标签: php timezone dst

我有一些处理日期和时间的代码。我认为没关系,但是想测试一下,当DST的时钟前进时它会起作用。

我可以使用date_default_timezone_set('Europe/London');更改时区,并想知道是否有一个易于模拟的DST,而不必等到时钟发生变化!

2 个答案:

答案 0 :(得分:2)

您没有提供有关您要测试的内容的详细信息,但我认为您具有执行与时间相关的功能,例如:

function setExpiryTime(DateTime $start, $minutes){
}

显而易见的测试是提供输入参数,使您的代码跨越DST边界。您可以在自己喜欢的搜索引擎中找到此类信息,也可以运行简单的PHP代码段:

<?php

$timezone = new DateTimeZone('Europe/London');
print_r( $timezone->getTransitions(mktime(0, 0, 0, 1, 1, date('Y')), mktime(0, 0, 0, 12, 31, date('Y'))) );
Array
(
    [0] => Array
        (
            [ts] => 1388530800
            [time] => 2013-12-31T23:00:00+0000
            [offset] => 0
            [isdst] => 
            [abbr] => GMT
        )

    [1] => Array
        (
            [ts] => 1396141200
            [time] => 2014-03-30T01:00:00+0000
            [offset] => 3600
            [isdst] => 1
            [abbr] => BST
        )

    [2] => Array
        (
            [ts] => 1414285200
            [time] => 2014-10-26T01:00:00+0000
            [offset] => 0
            [isdst] => 
            [abbr] => GMT
        )

)

因此你可以测试:

setExpiryTime(new DateTime('2014-03-30T00:55:00+0000'), 10);
setExpiryTime(new DateTime('2014-10-26T00:55:00+0000'), 10);

答案 1 :(得分:0)

您当然可以了解用户是否处于夏令时区域或夏令时当前是否有效。

echo date('I', time());

返回0/1;在哪里,

  

0 =夏令时无效。   1 =夏令时生效。

     

更多详情:http://php.net/manual/en/function.date.php

根据此结果,您可以制作条件代码来模拟输出。