使用 PHP 时DateTime
类并尝试设置一个DateTimeZone
根据我的设置方式,我得到不同的结果:使用DateTime::__construct
或使用DateTime::setTimezone
method.
这是一个例子:
$date = '2014-08-01'
$dateTimeOne = new DateTime($date, new DateTimeZone('America/Los_Angeles'));
echo $dateTimeOne->format('Y-m-d\TH:i:sP');
// 2014-08-01T00:00:00-07:00
$dateTimeTwo = new DateTime($date);
$dateTimeTwo->setTimezone(new DateTimeZone('America/Los_Angeles'));
echo $dateTimeTwo->format('Y-m-d\TH:i:sP');
// 2014-07-31T17:00:00-07:00
也可以看看http://3v4l.org/LrZfM
我环顾四周,除了以下评论之外,没有找到解决这些特定行为的充分解释php 文档:datetime.settimezone和书php|架构师的日期和时间编程指南:处理时区 - DateTimeZone.
评论指出,DateTime::setTimezone
方法将更改特定时间点(时间戳)的时区,但 Unix 时间戳保持不变。
另一方面DateTime::__construct
DateTimeZone 参数用于“用用户定义的时区覆盖当前默认时区”第 3 章:处理时区 - DateTimeZone.
除此之外,关于这个主题的内容不多(我能找到)。
这就是我想知道的:
- 对这两种设置时区的方法的进一步解释
- 我什么时候应该使用
DateTime::__construct
设置时区
- 我什么时候应该使用
DateTime::setTimezone
设置时区
- 使用其中一种或另一种或如何结合使用它们的清晰示例
这是正常行为。
当您未在构造函数中指定时区时,将使用默认时区,即使用 date_default_timezone_set() 设置的时区。
当您随后致电时:
$dateTimeTwo->setTimezone(new DateTimeZone('America/Los_Angeles'));
它将默认时区中设置的日期移至新时区。
1) (构造函数) 在“America/Los_Angeles”中设置日期
2) (setter) 在默认时区设置日期,将日期移动到“America/Los_Angeles”
您的默认时区可能是 UTC 或接近的时区。您告诉计算机将 2014 年 8 月 1 日设置为 UTC。然后,您要求切换到 7 小时前的“America/Los_Angeles”时区,因此将日期更改为 2014 年 7 月 31 日的 17:00。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)