выберите все даты, равные сегодняшнему дню с разницей во времени - PullRequest
1 голос
/ 07 марта 2011

Мы хотели бы получить все строки, которые мы добавили сегодня, у нас есть имя столбца dnt (timestamp), но наш часовой пояс на 12 часов опережает часовой пояс сервера.Так что бы SQL запрос получить текущие результаты.В настоящее время мы используем следующее ...

SELECT * FROM сообщений ГДЕ user = '$ user' AND DATE (dnt) = CURDATE ();

Но это не дает правильных результатов из-заразница часовых поясов.

спасибо.

Ответы [ 2 ]

2 голосов
/ 07 марта 2011

Я бы предложил хранить все даты в часовом поясе GMT.Затем преобразуется в представление во время отображения.Таким образом, когда вам нужно запросить некоторую дату, сначала вы конвертируете дату на стороне клиента в GMT и передаете ее непосредственно в ваш запрос SQL.SQL-серверы имеют некоторые функции для получения даты GMT, а не даты сервера.Вы также можете передать текущую дату в часовом поясе GMT ​​в качестве параметра запроса вместо использования функций SQL (используя функции PHP для получения даты gmt).

См., Например: gmmktime

1 голос
/ 07 марта 2011

Я согласен с @MarvinLabs - это недостаток дизайна.

однако, если вы хотите оставить дизайн как есть, вы должны использовать это вместо:

SELECT * 
FROM messages 
WHERE user = '$user' 
  AND DATE(CONVERT_TZ(dnt,'source_timezone','destination_timezone')) = CURDATE()
  • изменить source-timezone и destination_timezone соответственно

  • MySQL CONVERT_TZ () Ссылка: здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...