【问题标题】:Why is PHP assigning different timezones on certain dates when calculating timestamps without specified timezones?为什么 PHP 在计算没有指定时区的时间戳时会在某些日期分配不同的时区?
【发布时间】:2019-07-15 10:47:56
【问题描述】:

当我想计算天数的差异时(以 date1 和 date2 为例):

$date1 = '2019-03-27';
$date2 = '2019-04-01';

echo((strtotime($date2) - strtotime($date1)) / 86400);

结果是:

2

但是对以下内容做同样的事情:

$date1 = '2019-03-27';
$date2 = '2019-04-01';

echo((strtotime($date2) - strtotime($date1)) / 86400);

返回:

4.9583333333333

这可以通过以下方式解决:date_default_timezone_set('UTC');

但为什么 PHP 在某些日期默认不使用相同的时区?

【问题讨论】:

  • 当我在 PHP 7.2 上运行时得到“5”,这是有意义的 27,28,29,30,01(当你除以 86400 你实际计算天数时)
  • 1.两个代码 sn-ps 是相同的,第一个代码不会产生该结果。 2. 在您所在时区的那个时间范围内的某个地方有一个 DST 变化,这就是为什么您会得到一个分数结果。
  • 我在 PHP 版本 7.2.8-1+ubuntu16.04.1+deb.sury.org+1 上得到了这个 x.958333 值,这与在这里发帖的人相同:@ 987654321@ 所以我不能成为唯一的编辑:@deceze 你一定是对的,没想到!谢谢!
  • 如果我可以推荐youtube.com/watch?v=-5wpm-gesOY...
  • 可怜的他。该死的,时区! :D

标签: php strtotime php-7.2


【解决方案1】:

在您所在时区的 3 月底某个时候,从冬季时间到夏季时间会发生变化,因此一天只有 23 小时,因此它不能完全除以 86400(24 小时)。

【讨论】:

    猜你喜欢
    • 2020-07-19
    • 2021-01-05
    • 1970-01-01
    • 2011-05-26
    • 2018-12-17
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多