为什么在计算没有指定时区的时间戳时,PHP在某些日期分配不同的时区?

时间:2019-02-21 13:40:42

标签: php strtotime php-7.2

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

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,debit INT NULL
,credit INT NULL
);

INSERT INTO my_table VALUES
(1,NULL,35),
(2,65,NULL),
(3,NULL,35),
(4,65,NULL),
(5,65,NULL),
(6,65,NULL);


SELECT id
     , debit
     , credit
     , @balance := @balance+(COALESCE(debit,credit*-1)) balance 
  FROM my_table
     , (SELECT @balance :=0) vars
 ORDER 
    BY id;
+----+-------+--------+---------+
| id | debit | credit | balance |
+----+-------+--------+---------+
|  1 |  NULL |     35 |     -35 |
|  2 |    65 |   NULL |      30 |
|  3 |  NULL |     35 |      -5 |
|  4 |    65 |   NULL |      60 |
|  5 |    65 |   NULL |     125 |
|  6 |    65 |   NULL |     190 |
+----+-------+--------+---------+

结果是:

  

2

但是与此同时做的是:

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

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

返回:

  

4.9583333333333

此问题可以通过以下方式解决:$date1 = '2019-03-27'; $date2 = '2019-04-01'; echo((strtotime($date2) - strtotime($date1)) / 86400);

但是,为什么默认情况下PHP在某些日期不使用相同的时区呢?

1 个答案:

答案 0 :(得分:2)

3月底某个时区的冬令时间与夏令时间有所变化,因此其中一天只有23小时,因此它不能被86400(24小时)整齐划一。

相关问题