gpt4 book ai didi

php - Mysql、PHP 和 UTC_TIMESTAMP()

转载 作者:行者123 更新时间:2023-11-30 22:41:01 25 4
gpt4 key购买 nike

我知道这里有一百个关于这个主题的问题,但我已经阅读了所有问题,但仍然没有理解。

我使用 UTC_TIMESTAMP() 将上次访问 API 的日期存储在设置表中。列类型是 mysql timestamp:

UPDATE settings SET last_pull = UTC_TIMESTAMP();

当我从 mysql 中选择它时,我得到以下信息:

mysql> select last_pull from settings;
+---------------------+
| last_pull |
+---------------------+
| 2015-06-30 23:05:00 |
+---------------------+
1 row in set (0.00 sec)

似乎很清楚,因为我使用的是太平洋时间,UTC 时间提前 8 小时。因此,我创建该记录时是本地时间 16:05:00。 (实际上是本地时间 16:05——我在那里!)

令我困惑的是,当我将数据从数据库中拉回时,根据此处的每个答案,我应该能够使用默认的 PHP datedatetime 函数,假设我的时区设置正确,我应该从该时间戳获取本地时间(例如 date('Y-m-d H:i:s', $last_pull_value) 应该返回 2015-06-30 16:05:00).

这个假设不正确吗?我已验证我的 linux 和 PHP 时区是正确的,并且 mysql 也已正确设置。

当我这样做的时候

$last_pull = new DateTime();
$last_pull->setTimestamp($row['last_pull']);

var_dump($last_pull->format("c"));

它返回:

"2015-06-30 23:05:00"

然后我明确设置时区:

$last_pull = new DateTime();
$last_pull->setTimestamp($row['last_pull']);
$last_pull->setTimezone(new DateTimeZone('America/Los_Angeles'));

var_dump($last_pull->format("c"));

它返回完全相同的东西(如果默认的 TZ 开始时是正确的,这是有意义的)。

"2015-06-30 23:05:00"

我的问题是如何获取 API 上次提取时的本地时间?为什么 datetime 函数不返回 16:05:00?

谢谢

最佳答案

如果您在初始化时为 DateTime 对象设置时区,它将按您预期的方式工作。

$last_pull = new DateTime('2015-06-30 23:05:00', new DateTimeZone('UTC'));
var_dump($last_pull->format("c")); //string(25) "2015-06-30T23:05:00+00:00"
$last_pull->setTimezone(new DateTimeZone('America/Los_Angeles'));
var_dump($last_pull->format("c")); //string(25) "2015-06-30T16:05:00-07:00"

DateTime 对象的文档指出,用于新日期时间对象的默认时区是您当前的时区 - http://php.net/manual/en/datetime.construct.php

关于php - Mysql、PHP 和 UTC_TIMESTAMP(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31150794/

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