我一辈子都无法理解为什么从下面的代码中返回的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")));
有人能告诉我我做错了什么吗。
您需要首先使用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");