PHP日期时间戳错误


PHP Date Timestamp wrong

我一辈子都无法理解为什么从下面的代码中返回的unix时间戳显示为2012年8月31日星期五06:26:00 GMThttp://www.onlineconversion.com/unix_time.htm.返回的日期/时间实际上应该是2012年8月31日星期五下午02:26:41。

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

有人能告诉我我做错了什么吗。

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

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

date_default_timezone_set('America/Los_Angeles');

手动

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年的秒数更简单。

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

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

$stringtime=日期('D,D M Y h:i:s A',strtotime("2012-08-31 02:26:41");