PHP 中的日期函数总是将日期晚一天

Ala*_*ine 3 javascript php date php-5.6

我的情况是总是让日期落后一天。例如,我有这个-243219600相对于日期18/04/1962 的值

之后

date('d/m/Y', -243219600);
Run Code Online (Sandbox Code Playgroud)

输出是:

17/04/1962
Run Code Online (Sandbox Code Playgroud)

-243219600秒从 1970 年 1 月 1 日 00:00:00 UTC 在javascript这里你得到正确的日期。

Fab*_*ler 5

的输出date()取决于配置的时区。如果加上时间和时区,就可以看到了。就我而言,它是 CET:

echo date('d/m/Y H:m:i T', -243219600);
//prints: 18/04/1962 00:04:00 CET
Run Code Online (Sandbox Code Playgroud)

解决方案 date()

如果要date()使用UTC,请使用date_default_timezone_set

date_default_timezone_set('UTC');
echo date('d/m/Y H:m:i T', -243219600);"
Run Code Online (Sandbox Code Playgroud)

输出

 17/04/1962 23:04:00 UTC
Run Code Online (Sandbox Code Playgroud)

(你看,因为它是 UTC 午夜前一小时,日期取决于时区)

解决方案DateTime

如果DateTime类是由 Unix 时间戳构造的,则该类始终使用 UTC:

文档

笔记:

$timezone$time参数是 UNIX 时间戳(例如@946684800)或指定时区(例如2010-01-28T15:00:00+02:00)时,将忽略该参数和当前时区。

因此,您也可以使用以下代码:

echo (new DateTime('@-243219600'))->format('d/m/Y');
Run Code Online (Sandbox Code Playgroud)