0

我一辈子都想不通为什么从下面的代码返回的 unix 时间戳显示为 Fri, 31 Aug 2012 06:26:00 GMT。我已经在我的服务器以及http://www.onlineconversion.com/unix_time.htm上对此进行了测试。返回的日期/时间实际上应该是 Fri, 31 Aug 2012 02:26:41 PM。

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

谁能告诉我我做错了什么。

4

4 回答 4

4

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

于 2012-09-01T01:09:42.853 回答
0

您需要先使用date_default_timezone_set函数设置时区,即

date_default_timezone_set('America/Los_Angeles');

手动

于 2012-09-01T01:12:38.877 回答
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 年开始计算秒数更简单。

于 2012-09-01T01:52:54.613 回答
-1

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

'D, d 我的 h:i:s A'

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

于 2012-09-01T01:17:32.950 回答