今年,2014年3月9日凌晨2点,时间推迟了一小时。
我知道我可以使用date('I');
确定我们是否处于DST状态。我需要做的是确定今天是否是DST(春季或秋季)的第一天
我正在寻找以下内容:
function isFirstDayOfDST($date) {
//Return true if today is FIRST day of DST
}
echo isFirstDayOfDST('2013-03-09');
//true
echo isFirstDayOfDST('2013-03-10');
//false
这是我可以通过编程方式执行的操作,还是需要维护DST日期的内部日历?
更新
基于@ MarcB的评论DateTimeZone::getTransitions看起来它让我得到了我需要的东西,特别是那个来自rubo77的页面上的例子。
function getTransitionsForYear($year=null, $tz = null){
if(!$year) $year=date("Y");
if (!$tz) $tz = date_default_timezone_get();
$timeZone = new DateTimeZone($tz);
if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
$transitions = $timeZone->getTransitions(mktime(0, 0, 0, 2, 1, $year),mktime(0, 0, 0, 11, 31, $year));
$index=1;
} else {
// since 1980 it is regular, the 29th element is 1980-04-06
// change this in your timezone
$first_regular_index=29;
$first_regular_year=1980;
$transitions = $timeZone->getTransitions();
$index=($year-$first_regular_year)*2+$first_regular_index;
}
$temp = array_slice($transitions, $index, 2);
$spring = explode('T', $t[0]['time']);
$fall = explode('T', $t[1]['time']);
$dates = array();
$dates['spring'] = $spring[0];
$dates['fall'] = $fall[0];
return $dates;
};
正在运行$dates = getTransitionsForYear('2014', 'America/New_York');
让我:
Array
(
[spring] => 2014-03-09
[fall] => 2014-11-02
)
我已经测试了2015年,2016年和2017年,所有工作都按预期进行。
答案 0 :(得分:0)
@Marc B的评论回答了这个问题。 " php.net/manual/en/datetimezone.gettransitions.php应该告诉你。 - Marc B"
由于他没有给出答案,我自己回答并按照此处所述标记CW:Question with no answers, but issue solved in the comments (or extended in chat)