在PHP中检索当前时间时,如何计算夏令时?

时间:2011-08-18 15:57:16

标签: php time dst

通过PHP脚本( time() )获取时间时,在夏令时期间,它似乎返回一小时的时间值。有没有办法获得正确的时间,占夏令时?

5 个答案:

答案 0 :(得分:2)

time()返回Unix时间戳,Unix时间戳是固定的时间段:自Unix Epoch以来的秒数。它不受时区的影响。

一旦有了精确的时刻,您可能想要计算给定地点的当地时间:

<?php

$now = time();
echo $now . PHP_EOL;

date_default_timezone_set('Europe/Madrid');
echo date('r', $now) . PHP_EOL;

date_default_timezone_set('Asia/Tokyo');
echo date('r', $now) . PHP_EOL;

...将为同一时间戳打印不同的本地日期:

1313683738
Thu, 18 Aug 2011 18:08:58 +0200
Fri, 19 Aug 2011 01:08:58 +0900

同样的理由适用于相反的操作:

<?php

date_default_timezone_set('Europe/Madrid');
$then = mktime(23, 55, 30, 12, 31, 2000);
echo $then . PHP_EOL;

date_default_timezone_set('Asia/Tokyo');
$then = mktime(23, 55, 30, 12, 31, 2000);
echo $then . PHP_EOL;

...将打印不同的时间戳:

978303330
978274530

答案 1 :(得分:0)

time()以Unix时间戳格式获取操作系统时间。您可以使用PHP来解决这个问题,但是这应该是考虑修复操作系统级别的问题。

答案 2 :(得分:0)

要么确保系统时间是最新的,要么在PHP中加/减:http://www.php.net/manual/en/function.date.php#69221

答案 3 :(得分:0)

使用date_default_timezone_set()

设置正确的时区

答案 4 :(得分:0)

这不是“答案”,但您的提供商可能会错误管理本地服务器时间。我不知道您使用时间信息的上下文,但每当我使用这些信息时,我都会尝试使用UTD / GMT。如果您的用户遍布全球,甚至是一个国家,整顿时间可能是一场噩梦。使用UDT / GMT可以合理地完成文件保存时间,日志时间或其他用途的表示。