Php strtotime返回错误的时间戳

时间:2014-03-06 21:34:55

标签: php date strtotime hour

我做

strtotime("2008-09-04")

09是月份,04是白天,我得到结果:

1220500800

Thu,2008年9月4日04:00:00 GMT 。那4个小时从哪里来?我应该从strtotime获得1220486400而不是1220500800

3 个答案:

答案 0 :(得分:3)

您可以使用函数date_default_timezone_set('UTC');全局设置时区,或者只需在调用strtotime()函数时在本地设置时区:

echo strtotime("2008-09-04 +0000"); # 1220486400

答案 1 :(得分:0)

正如上面的人所说,你可能会遇到时区错配。此功能可用于调试问题:http://us3.php.net/date_default_timezone_get

答案 2 :(得分:0)

PHP的strtotime最常见的问题是时区和日期时间格式。我将解决这两点。

  1. 首先是格式。正如其他人在stackoverflow上所建议的那样,请使用iso 8601日期格式YYYY-MM-DD(https://www.iso.org/iso-8601-date-and-time-format.html)。例如,2012年9月27日表示为2012-09-27。
  2. 下一个时区。最好的做法是,不要使用任何时区使用“世界标准时间” UTC(世界标准时间,它与没有夏令时的GMT相对应)。 UTC是全世界普遍使用的时间标准。世界各地的计时中心已同意保持其时标紧密同步或协调,因此被称为协调世界时(https://www.timeanddate.com/time/aboututc.html)。

因此,现在我们有了清晰的画面。要将日期时间转换为unixtimestamp,请执行以下操作:

// Saves your local set Timezone.
$saveDDTZ = date_default_timezone_get(); 
// Sets the timezone to UTC
date_default_timezone_set("UTC");
// Converts a date-time into a unix timestamp (= 1560470400).
$unixTS = strtotime( "2019-06-14 00:00:00 UTC");
// Restore the timezone
date_default_timezone_set($saveDDTZ");

要将unix时间戳恢复为日期,请使用:

// Saves your local set Timezone.
$saveDDTZ = date_default_timezone_get(); 
// Sets the timezone to UTC
date_default_timezone_set("UTC");|
$unixTS = 1560470400
$dateTime = date("Y-m-d H:i:s", $unixTS);
// Restore the timezone
date_default_timezone_set($saveDDTZ");

如果要将UTC日期更改为TimeZone,请使用UTC与TimeZone和夏时制的区别。