PHP日期时间戳错误

PHP日期时间戳错误,php,Php,我一辈子都不明白为什么下面代码返回的unix时间戳显示为Fri,2012年8月31日06:26:00 GMT。我已经在我的服务器上测试过了。返回的日期/时间应为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小时的差

我一辈子都不明白为什么下面代码返回的unix时间戳显示为Fri,2012年8月31日06:26:00 GMT。我已经在我的服务器上测试过了。返回的日期/时间应为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小时的差异。

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

您需要首先使用
date\u default\u timezone\u set
函数设置时区,即

date_default_timezone_set('America/Los_Angeles');

.

您需要首先使用
date\u default\u timezone\u set
功能设置时区,即

date_default_timezone_set('America/Los_Angeles');

.

不要使用G。G将其转换为Gmt,并且它是它使用的唯一格式字符。只是格式字符串有误

D,D M Y h:i:A'


$stringtime=日期('D,D M Y h:i:SA',标准时间(“2012-08-31 02:26:41”)

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

D,D M Y h:i:A'

$stringtime=日期('D,D M Y h:i:SA',标准时间(“2012-08-31 02:26:41”)

strotime()
将输入字符串转换为unix时间戳。如果您的输入字符串没有时区信息,PHP必须猜测您所指的时区。这并不是真的猜测。。。它查看您的默认时区

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

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\u default\u timezone\u set()
来设置时区。这将影响以后对
date()
的所有调用

您可能还对使用
DateTime
类感兴趣,它比从1970年开始计算秒更简单。

strotime()
将输入字符串转换为unix时间戳。如果您的输入字符串没有时区信息,PHP必须猜测您所指的时区。这并不是真的猜测。。。它查看您的默认时区

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

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\u default\u timezone\u set()
来设置时区。这将影响以后对
date()
的所有调用


您可能还对使用
DateTime
类感兴趣,该类比从1970年开始计算秒数更简单。

猜测41秒只是一个未命中的拼写?猜测41秒只是一个未命中的拼写?是的,对于EDT(GMT-4)时间来说,时差似乎是正确的。更改服务器上php.ini文件中的设置,或使用
date\u default\u timezone\u set
设置时区。有关该函数的文档,请参阅。@Chaser324感谢您在注释中添加链接,au.php.net目前看起来像是在等待打开它,以便将链接添加到我的答案中+1没问题。在美国,php.net网站目前对我来说也有点不稳定,这不是时区问题。输入时间没有指定时区,因此不会转换它(假定它是本地的)。看看他的格式字符串。它与输出不匹配。它只使用G表示GMT格式的输出。说UNIX时间戳是GMT是不正确的。它们根本没有时区。它们是从一个固定的时间点开始的秒数,这个时间点恰好是1970-01-01T00:00:00Z。是的,时间差对于EDT(GMT-4)时间来说似乎是正确的。更改服务器上php.ini文件中的设置,或使用
date\u default\u timezone\u set
设置时区。有关该函数的文档,请参阅。@Chaser324感谢您在注释中添加链接,au.php.net目前看起来像是在等待打开它,以便将链接添加到我的答案中+1没问题。在美国,php.net网站目前对我来说也有点不稳定,这不是时区问题。输入时间没有指定时区,因此不会转换它(假定它是本地的)。看看他的格式字符串。它与输出不匹配。它只使用G表示GMT格式的输出。说UNIX时间戳是GMT是不正确的。它们根本没有时区。它们是自固定时间点(即1970-01-01T00:00:00Z)起的秒数。字符串中的G与GMT无关。
G一小时的24小时格式(不带前导零)-0到23
G字符串中的G与GMT无关。
G一小时的24小时格式(不带前导零)-0到23