繁体   English   中英

PHP DateTime时区 - 构造函数与Setter方法

[英]PHP DateTime Timezones - Constructor vs Setter method

当使用PHP DateTime类并尝试设置DateTimeZone根据我的设置方式得到不同的结果:使用DateTime::__construct或使用DateTime::setTimezone方法。

这是一个例子:

$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 docs中的以下注释: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或接近的时间。 您告诉计算机将UTC设置为2014-08-01。 然后你要求在7点之前切换到'America / Los_Angeles'时区,将日期更改为2014-07-31 17:00。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM