首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP -使用date查找夏令时

PHP -使用date查找夏令时
EN

Stack Overflow用户
提问于 2013-04-30 05:02:29
回答 2查看 7.5K关注 0票数 6

我想给date()一个日期,无论这个日期是不是DST,都让它返回。在windows7机器上通过xampp运行PHP 5.4.7。运行PHP5.2.8的linux机器返回0,无论我给它的日期是什么。

我的代码出了什么问题?

代码语言:javascript
运行
复制
echo date('I', strtotime('30-Mar-2013'));
# should return a 1 but returns 0

echo date('I', strtotime('30-Mar-2013 America/Los_Angeles'))."<br>"; # returns 0
echo date('I', strtotime('31-Mar-2013 America/Los_Angeles'))."<br>"; # returns 1

DST之间的切换应在2013年3月9日至2013年3月10日之间。

此时,问题是,为什么我的PHP代码不返回1。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-30 09:33:34

您不能使用strtotime,因为它会创建一个UTC时间戳,从而删除时区信息。相反,只需使用DateTime

代码语言:javascript
运行
复制
$date = new DateTime('30-Mar-2013 America/Los_Angeles');
echo $date->format('I');
# 1

$date = new DateTime('31-Mar-2013 America/Los_Angeles');
echo $date->format('I');
# 1

$date = new DateTime('09-Mar-2013 America/Los_Angeles');
echo $date->format('I');
# 0

$date = new DateTime('10-Mar-2013 America/Los_Angeles');
echo $date->format('I');
# 0

注意到最后一个的DST仍然是0吗?这是因为转换发生在凌晨2:00:

代码语言:javascript
运行
复制
$date = new DateTime('10-Mar-2013 01:00 America/Los_Angeles');
echo $date->format('I');
# 0

$date = new DateTime('10-Mar-2013 02:00 America/Los_Angeles');
echo $date->format('I');
# 1

这是一个“向前跳跃”的转换,时钟从2:00跳到3:00。

注意回退转换过程中的多义性,此时时钟会从2:00跳回到1:00

代码语言:javascript
运行
复制
$date = new DateTime('3-Nov-2013 01:00 America/Los_Angeles');
echo $date->format('I');
# 1

有两个1:00的AM,这是第一个。它是模棱两可的,因为我们可能指的是第二个,但没有表示出来。

有人会认为PHP会允许以下两种情况之一:

代码语言:javascript
运行
复制
new DateTime('3-Nov-2013 01:00 -0700 America/Los_Angeles')  #PDT
new DateTime('3-Nov-2013 01:00 -0800 America/Los_Angeles')  #PST

但当我测试时,这些似乎不起作用。我还尝试了ISO格式的日期。有人知道如何正确区分PHP中的多义值吗?如果是这样,请在评论中编辑或更新。谢谢。

票数 12
EN

Stack Overflow用户

发布于 2017-04-21 02:52:20

注意回退转换过程中的多义性,此时时钟会从2:00跳回到1:00 $date = new DateTime('3-Nov-2013 02:01 America/Los_Angeles');

echo $date->format('I');

有两个1:00 AM,2:01是第二个1点加上1小时1分钟。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16288185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档