【问题标题】:PHP simulate Day Light SavingsPHP 模拟夏令时
【发布时间】:2014-01-21 09:46:04
【问题描述】:

我有一些处理日期和时间的代码。我认为这没问题,但想测试它在 DST 时钟前进时是否有效。

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

【问题讨论】:

  • "无需等到时钟改变" 手动更改系统时间怎么样?
  • 我怀疑是否有替代更改系统时钟的方法。你在什么操作系统上测试?
  • 可以在 Windows 以外的任何设备上进行测试。也许您对系统时间的看法是正确的,这听起来很明智,因为我想检查从数据选择器到数据库的所有内容,所以 system = sensible。

标签: php timezone dst


【解决方案1】:

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

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

显而易见的测试是提供使您的代码跨越 DST 边界的输入参数。你可以在你最喜欢的搜索引擎中找到这些信息,或者运行一个简单的 PHP sn-p:

<?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);

【讨论】:

    【解决方案2】:

    你当然可以查到,用户是在夏令时区还是夏令时有效。

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

    这将返回 0/1;哪里,

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

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

    基于此结果,您可以制作条件代码来模拟您的输出。

    【讨论】:

      猜你喜欢
      • 2011-09-03
      • 2013-11-15
      • 2014-04-26
      • 2014-03-23
      • 2012-09-13
      • 1970-01-01
      • 2014-03-23
      • 2012-11-21
      相关资源
      最近更新 更多