gpt4 book ai didi

php - 之后我必须用 DateTimeZone 显式覆盖 PHP 的 DateTime 吗?

转载 作者:搜寻专家 更新时间:2023-10-31 22:15:58 25 4
gpt4 key购买 nike

我收到一个时间:

0001-01-01T00:00:00.000Z
Greenwich Mean Time

我将其保存在 DateTime 中:

$event->startTime = new DateTime($item->startTime, new DateTimeZone('GMT'));

这给了我:

  protected 'startTime' => 
object(DateTime)[137]
public 'date' => string '0001-01-01 00:00:00' (length=19)
public 'timezone_type' => int 2
public 'timezone' => string 'Z' (length=1)

这意味着它会忽略时区。来自文档:

Note:

The $timezone parameter and the current timezone are ignored when the $time parameter either is a UNIX timestamp (e.g. @946684800) or specifies a timezone (e.g. 2010-01-28T15:00:00+02:00).

如果我之后覆盖它:

$event->startTime->setTimezone(new DateTimeZone('GMT'));

我得到:

  protected 'startTime' => 
object(DateTime)[137]
public 'date' => string '0001-01-01 00:00:00' (length=19)
public 'timezone_type' => int 3
public 'timezone' => string 'UTC' (length=3)

因此,响应说时区必须是 GMT/UCT,即 +0,但是 PHP 决定 tl; dr 我最终得到了我的默认 php.ini 时区 +2。是不是错了?

无论如何,我会以开始时间作为倒计时,所以时区是至关重要的。我的问题是:将时区覆盖为 UCT 对我来说是否正确?当我要使用 DateTime::diff 时,这会给我正确的时间吗?

最佳答案

The documentation表示您不应使用 GMT 作为 DateTimeZone 类的有效时区。

创建 DateTime 时可能会删除 Z 并指定时区,因此构造函数不会忽略时区。

$startTime = new DateTime('0001-01-01T00:00:00.000', new DateTimeZone('UTC'));

最简单的做法是将所有内容都保存为 UTC,否则在不同时区运行代码或在夏令时生效时可能可能会导致不可预见的问题。

关于php - 之后我必须用 DateTimeZone 显式覆盖 PHP 的 DateTime 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6277133/

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