#php #mysql
#php #mysql
Вопрос:
Существует много похожих вопросов, но я считаю, что этот уникальный. (Извините, если это не так)
В нашей базе данных есть поле datetime с именем «date_sampled», которое мы храним с помощью UTC_TIMESTAMP()
Наша цель — вернуть количество секунд с 1970 года. Я заметил, что UNIX_TIMESTAMP(), если не указан аргумент, возвращает текущую UNIX_TIMESTAMP(), и если передается datetime (т.Е. 2011-10-10), возвращает временную метку в секундах.
Однако UTC_TIMESTAMP() так не работает, он возвращает только текущую временную метку UTC.
Итак, как я могу преобразовать мое поле DateTime (содержащее дату и время UTC) в секунды с 1970 года в MySQL? Если это невозможно сделать в MySQL, тогда будет работать PHP-решение.
Спасибо.
Ответ №1:
В MySQL есть функция TIMESTAMPDIFF, вы можете использовать ее примерно так
SELECT TIMESTAMPDIFF(SECOND,'1970-01-01 00:00:00', YourUTCDateFromSomewhere)
Более подробная информация в документах — http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timestampdiff
Комментарии:
1. Хорошо, это довольно интересно. Я попробую. 🙂
Ответ №2:
Что вы UTC_TIMESTAMP
пытались сделать, чего UNIX_TIMESTAMP
не было? Временные метки Unix по определению находятся в UTC.
Я предполагаю, что проблема, с которой вы столкнулись, заключается в том, что, даже если вы сохраняете свои даты и время в UTC, UNIX_TIMESTAMP
это дает вам результат смещения часового пояса, поэтому вы получаете значение, на несколько часов отличающееся от того, что вы ожидаете.
UNIX_TIMESTAMP
уважает переменную MySQL time_zone
, поэтому, если все ваши даты указаны в UTC, вы можете просто установить time_zone
переменную вашего сеанса в UTC, что приведет UNIX_TIMESTAMP
к отсутствию преобразования часового пояса при преобразовании даты и времени в метку времени.
SET time_zone = ' 00:00'
Комментарии:
1. Спасибо! Это действительно проблема, с которой я столкнулся. Теперь это имеет смысл, ха-ха 🙂
Ответ №3:
Интересная проблема… Я понятия не имею, как это сделать с помощью SQL… но решением PHP было бы использовать функцию strtotime() ..
<?php
echo strtotime('2011-10-10');
?>
Приведенный выше пример возвращает значение 1318219200, которое представляет собой количество секунд, прошедших с эпохи 1970 года