DateTime (часовые пояса) в веб-приложениях PHP - PullRequest
1 голос
/ 21 января 2011

Я узнал, что должен хранить UTC и показывать по местному времени.Как я могу запросить базу данных SQL для строк, которые должны быть сегодня, в соответствии с временем пользователя.У меня есть таблица Todo со столбцом dueOn, которая содержит метку времени UTC Unix в int.

Я думаю, это будет выглядеть примерно так:

SELECT * FROM Todos 
WHERE dueOn BETWEEN {today's timestamp} AND {tomorrow's timestamp}

Что я буду использовать, чтобы получить метку времени сегодня и завтра?Я думаю, это звучит просто, но меня очень смущают все подобные методы для даты и времени

ОБНОВЛЕНИЕ

Мне интересно, что-то вроде приведенного ниже является правильным

// set default timezone to the user's timezone
date_default_timezone_set("Asia/Singapore"); 
// get UTC datetime for today & tomorrow
$today = DateTime::createFromFormat('Y-m-d', date('Y-m-d'), new DateTimeZone('UTC')); 
$tomorrow =  clone($today);
$tomorrow->add(DateInterval::createFromDateString('1 day'));

$sql = 'SELECT * FROM Todos WHERE dueOn BETWEEN ' . $today->getTimestamp() . ' AND ' . $tomorrow->getTimestamp();
echo $sql;

Можно ли как-то узнать время пользователя без использования date_default_timezone_set?Или все будет в порядке, так как при этом будет установлен часовой пояс для запроса?

1 Ответ

4 голосов
/ 21 января 2011

В вашем запросе SQL используйте CONVERT_TZ, чтобы преобразовать дату исполнения из времени пользователя в UTC.

Пример:

SELECT * FROM Todos
WHERE CONVERT_TZ('2011-01-21', 'EST', 'UTC') BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 1 DAY)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...