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 年开始计算秒数更简单。