我在PHP中使用date()
和strtotime()
函数时遇到了一些问题。
我以UNIX-Timestamp格式保存了一个保存在数组中的日期。我使用PhpStorm控制台以及在XAMPP上运行于Apache的小型网站。如果我想使用date()
函数将该UNIX-Timestamp转换回可读格式。
具有讽刺意味的是,即使我复制粘贴了整个函数,并且肯定使用了相同的时间戳,Apache网站也会输出另一个时间,因此从理论上讲,它应该这样做。它的输出是23:50,而不是22:50。正确输出日期,月份和年份。 PhpStorm控制台运行正常。用strtotime()
生成的Unix时间戳是1549320600。
您之前有没有人遇到过这个问题,您是如何解决的?
答案 0 :(得分:0)
由于您的IDE和服务器设置不同,这看起来像是时区问题。
您可以检查时区,也可以使用PHP的gmdate()函数获取UTC时间中的日期。这样做时,日期将是相同的,但是请注意,这可能不是您想要的。
答案 1 :(得分:0)
确实没有在date()
manual page中进行记录,但是除非另有说明,否则所有生成字符串的PHP日期/时间函数都使用当前时区。例如,这是本地时间不同的Unix时代:
$epoch = 0;
date_default_timezone_set('UTC');
var_dump(date('r', $epoch));
date_default_timezone_set('Europe/Madrid');
var_dump(date('r', $epoch));
date_default_timezone_set('America/Chicago');
var_dump(date('r', $epoch));
date_default_timezone_set('Asia/Tokyo');
var_dump(date('r', $epoch));
string(31) "Thu, 01 Jan 1970 00:00:00 +0000"
string(31) "Thu, 01 Jan 1970 01:00:00 +0100"
string(31) "Wed, 31 Dec 1969 18:00:00 -0600"
string(31) "Thu, 01 Jan 1970 09:00:00 +0900"
但是,您未设置任何时区是什么时区?它不是服务器的时区,也不是任何硬编码的时区(PHP没有)。在计算机上安装PHP时,需要显式设置时区或PHP complaints about it。这就意味着服务器管理员(或为Linux发行版创建PHP软件包的人)几乎总是在系统范围内设置PHP时区。因此,您得到意想不到的结果,而不是警告。