gpt4 book ai didi

PHP mktime 和时区

转载 作者:可可西里 更新时间:2023-11-01 00:13:11 25 4
gpt4 key购买 nike

我正在研究一些与时间相关的功能,我选择始终使用 UTC 时间并将时间戳存储为整数以保持一致性。

但是,我注意到当我使用mktime 时,当前设置的时区似乎对mktime 的返回值有影响。从文档中我了解到 mktime 应该返回自纪元以来的秒数:

Returns the Unix timestamp corresponding to the arguments given. This timestamp is a long integer containing the number of seconds between the Unix Epoch (January 1 1970 00:00:00 GMT) and the time specified.

http://php.net/manual/en/function.mktime.php

但是,mktime 似乎包括当前设置的时区。使用以下代码时:

date_default_timezone_set('UTC');
$time = mktime(0, 0, 0, 1, 1, 2016 );
echo "{$time}\n";

date_default_timezone_set('Australia/Sydney');
$time = mktime(0, 0, 0, 1, 1, 2016 );
echo "{$time}\n";

我希望这两个时间值相同,但显然它们不是:

1451606400
1451566800

这似乎正好是 11 小时的时差:

1451606400 - 1451566800 = 39600 / (60*60) = 11

我对 mktime 有什么不正确的理解和/或为什么在使用 mktime 时要考虑时区?

最佳答案

我不能告诉你为什么会这样(PHP 对我来说在日期和时间方面从来没有意义)但是有一个替代函数 gmmktime()这是

Identical to mktime() except the passed parameters represents a GMT date. gmmktime() internally uses mktime() so only times valid in derived local time can be used.

还有一个comment on the PHP documentation for this function这解释了 mktime()gmmktime()time() 是如何工作的。从本质上讲,他们假设您总是在时区中思考,即使 UNIX 时间戳本身不带有时区也是如此。

关于PHP mktime 和时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36095947/

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