gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:47:37 24 4
gpt4 key购买 nike

当使用 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|architect's Guide to Date and Time Programming: Dealing with Timezones - DateTimeZone .

评论指出 DateTime::setTimezone 方法将更改特定时间点(时间戳)的时区,但 Unix 时间戳保持不变。

另一方面,DateTime::__construct DateTimeZone 参数用于“用用户定义的时区覆盖当前默认时区”Chapter 3: Dealing with Timezones - DateTimeZone .

除了这些之外,关于这个主题的内容并不多(我能够找到)。

这是我想知道的:

  • 进一步解释这两种设置时区的方法
  • 什么时候应该使用DateTime::__construct 来设置时区
  • 什么时候应该使用DateTime::setTimezone 来设置时区
  • 使用一个与另一个或如何结合使用它们的明显示例

最佳答案

这是正常行为。

当您未在构造函数中指定时区时,将使用默认时区,即使用 date_default_timezone_set() 设置的时区。

然后调用时:

$dateTimeTwo->setTimezone(new DateTimeZone('America/Los_Angeles'));

它将默认时区中设置的日期移动到新时区。


1) (constructor) 在“America/Los_Angeles”中设置日期
2) (setter) 在默认时区设置日期,将日期移动到'America/Los_Angeles'


您的默认时区可能是 UTC 或接近的时间。您告诉计算机将 2014-08-01 设置为 UTC。然后,您要求切换到早 7 小时的“America/Los_Angeles”时区,因此将日期更改为 2014 年 7 月 31 日的 17:00。

关于PHP DateTime 时区 - 构造函数与 Setter 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25658539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com