im, используя php 5.4.6 и MySQL 5.5.29, и я получаю проблемы, преобразовывая UNIX TIMESTAMP в MYSQL DATETIME и наоборот. Mysql и php wun на той же локальной машине.
У меня есть простая таблица mysql
CREATE TABLE Entry(
id SERIAL PRIMARY KEY,
created DATETIME NOT NULL);
Чтобы вставить данные, я использую php PDO и mysql NOW(). Это отлично работает, правильное дата-время хранится в базе данных.
Мой план - работать с временными метками unix на стороне клиента (php и mysql на стороне сервера).
Итак, я хотел бы предоставить временные метки unix моему клиенту. Поэтому я использую функцию MySql UNIX_TIMESTAMP(), чтобы преобразовать ее непосредственно в запрос.
Итак, пример запроса выглядит так:
SELECT created, UNIX_TIMESTAMP(created) AS TS FROM Entry
Результат: created = 2013-02-14 20:47:35 TS = 1360871255
Итак, теперь я хочу сделать другой путь, я передаю временную метку UNIX и хочу сравнить ее с Записями в моей базе данных. К сожалению, мне не удалось написать PHP script, который работает. Я не знаю почему, но когда я передаю одну и ту же метку времени (1360871255) в PHP, я не получаю 2013-02-14 20:47:35 с помощью этого метода:
public static function toDateTime($unixTimestamp){
return date("Y-m-d H:m:s", $unixTimestamp);
}
Когда я вызываю toDateTime (1360871255), вы вернетесь в 2013-02-14 20:02:35, который не является исходным DateTime.
Я знаю, мне не нужно форматировать 1360871255 на Y-m-d H: m: s, чтобы использовать его в MYSQL, но 1360871255, кажется, не так, как я ожидал (и возвращался MYSQL UNIX_TIMESTAMP).
Что я хочу сделать, это простой запрос, который показывает мне записи, которые старше определенной метки времени, что-то простое:
SELECT * FROM Entry WHERE created < 1360871255
но, как я уже упоминал ранее, результат запроса не является ожидаемым, потому что 1360871255, похоже, не соответствует правильному времени.
Я не указываю какой-либо специальный часовой пояс для соединения mysql в php.
Любые предложения?