Итак, я извлекаю метку времени из базы данных mysql и задавался вопросом, почему ни одна из проверок времени не работает.
echo "The time is " . date("Y-m-d h:i:s");
echo "</br>";
echo "Mysql Timestamp " . $row["Uptime"];
echo "</br>";
echo "Mysql Timestamp as strtotime" .strtotime($row["Uptime"]);
echo "</br>";
echo "strtotime Current Time". strtotime("now");
echo "</br>";
выход:
The time is 2018-08-18 12:42:55 Mysql Timestamp 2018-08-18 12:42:52 Mysql Timestamp as strtotime1534596172 strtotime Current Time1534552975
После преобразования в строку разница между числами составляет около 4000. Что происходит и как это исправить, не выполняя x-4000?






Разница связана с вашим местным часовым поясом. date() использует ваш местный часовой пояс для вычисления времени, а strtotime("now") и time() используют время UTC. Сравнивать:
echo "The time is " . date("Y-m-d h:i:s");
echo "</br>";
echo 'strtotime("now") is '. strtotime("now");
echo "</br>";
echo 'strtotime date("Y-m-d h:i:s") is '. strtotime(date("Y-m-d h:i:s"));
echo "</br>";
echo "time() is ". time();
echo "</br>";
Вывод (в часовом поясе Australia\Adelaide):
The time is 2018-08-17 09:06:35
strtotime("now") is 1534554395
strtotime date("Y-m-d h:i:s") is 1534511195
time() is 1534554395
Теперь попробуйте установить часовой пояс на UTC:
date_default_timezone_set('UTC');
echo "The time is " . date("Y-m-d h:i:s");
echo "</br>";
echo 'strtotime("now") is '. strtotime("now");
echo "</br>";
echo 'strtotime date("Y-m-d h:i:s") is '. strtotime(date("Y-m-d h:i:s"));
echo "</br>";
echo "time() is ". time();
echo "</br>";
Вывод - как видите, все формы возвращают одно и то же значение:
The time is 2018-08-18 01:07:21
strtotime("now") is 1534554441
strtotime date("Y-m-d h:i:s") is 1534554441
time() is 1534554441