日期格式 PHP "I"返回 DST 始终返回 0

  • 本文关键字:返回 DST 格式 PHP 日期 php
  • 更新时间 :
  • 英文 :


我有以下代码:

<?php
function dateIsDST ($timestamp=null, $timezone=null) {
if (is_null($timestamp) && is_null($timezone)) {
$date = new DateTime('@'.time());   
}
else {
$date = new DateTime('@'.$timestamp, new DateTimeZone($timezone));
}
echo $date->format('Y-m-d H:i:sP');
echo '---';
// date("I") returns 1 in summer and 0 in winter
var_dump ($date->format('I'));
}
dateIsDST(1648961437, 'America/New_York');

dateIsDST(1644861437, 'America/New_York');

但当它应该返回1(对于第一个方法调用(时,总是返回0。

2022-08-08 12:23:57+00:00---string(1) "0" // should be 1
2022-02-14 17:57:17+00:00---string(1) "0"

我做错了什么:

如果使用时间戳实例化DateTime,则会忽略时区。修复方法很简单。在函数中实例化后,用->setTimeZone设置时区

$date->setTimeZone(new DateTimeZone($timezone));

结果:

2022-04-03 00:50:37-04:00---string(1) "1"
2022-02-14 12:57:17-05:00---string(1) "0"

如需参考,请参阅关于DateTime::__construct:的PHP手册

$datetime参数是UNIX时间戳(例如@946684800(或指定时区(例如2010-01-28T15:00:00+02:00(时,$timezone参数和当前时区将被忽略。

之所以会发生这种情况,是因为Unix时间戳总是以UTC为单位——而且为了进行DateTime解析,这与在时间字符串中指定时区相同(=TZ参数被忽略(。

最新更新