PHP日期时间戳错误

时间:2012-09-01 01:06:18

标签: php

我不能为了我的生活,为什么从下面的代码返回的unix时间戳显示为Fri,2012年8月31日06:26:00 GMT。我已经在我的服务器和http://www.onlineconversion.com/unix_time.htm上对此进行了测试。返回的日期/时间实际上应该是星期五,2012年8月31日02:26:41 PM。

$stringtime = strtotime(DATE("m/d/y G:i", STRTOTIME("2012-08-31 02:26:41")));

任何人都可以告诉我,我做错了。

4 个答案:

答案 0 :(得分:4)

Unix时间戳总是GMT(没有时间偏移)。您可能需要在php.ini或代码中设置偏移量,以允许您看到的4小时差异。

答案 1 :(得分:0)

您需要先使用date_default_timezone_set功能设置时区,即

date_default_timezone_set('America/Los_Angeles');

Manual

答案 2 :(得分:0)

strtotime()将输入字符串转换为unix时间戳。如果您的输入字符串没有时区信息,PHP必须猜测您的意思是哪个时区。它并没有真正猜测......它会查看您的默认时区。

UNIX时间戳是自1970年1月1日UTC以来的秒数。所以,如果你这样做:

echo strtotime('1970-01-01 00:00:00');
// depends on your default time zone
你可能会期望零。但是您没有在字符串中指定时区,因此它将使用默认时区。实际输出会有所不同。

date_default_timezone_set('UTC');
echo strtotime('1970-01-01 00:00:00');
// always 0

现在它将为零。或者你可以消除歧义:

echo strtotime('1970-01-01 00:00:00 UTC');
// always 0

同样,当您使用date()时,PHP会在显示时间时应用默认时区。

您问题中的代码实际上并未显示您的错误所在。所以我不能真正告诉你你的问题是什么,除了你不理解PHP如何处理时间戳和时区。

如果您的时间戳是正确的,那么您可能只需要使用date_default_timezone_set()来设置您的时区。这将影响以后对date()的所有通话。

您可能也有兴趣使用DateTime类,这比计算1970年的秒数更直接。

答案 3 :(得分:-1)

不要使用G.将其转换为Gmt及其使用的唯一格式字符。你只是格式字符串错误

'D,d M Y h:i:s A'

$ stringtime = date('D,d M Y h:i:s A',strtotime(“2012-08-31 02:26:41”));