Попытка понять метки времени и часовые пояса в PHP - PullRequest
3 голосов
/ 24 декабря 2010

У меня есть приложение PHP, которое должно поддерживать часовые пояса.Теперь я храню значения даты и времени в базе данных как целые числа.Итак, вот что я делаю.

// now create the DateTime object for this time and user time zone
$dtime = new DateTime($date_time, new DateTimeZone($time_zone));
$timestamp = $dtime->format('U');

Что я не понимаю, так это даже если человек находится в Новой Зеландии (Pacific / Auckland) и приложение сохраняет эту дату: 24-12-2010 00:00:00, используя вышеуказанный кодзначение возвращается как: 1293102000

Затем, используя ту же самую дату / время и устанавливая часовой пояс в Лондон (Европа / Лондон), я получаю эту метку времени: 1293148800

Почему метки отличаются?Я думал, что отметка времени будет иметь то же количество секунд, что и та же дата, что и в эпоху Unix?

Если они отличаются, это означает, что когда кто-то ищет в базе данных все записи между 24-12-2010 00:00:00 и 24-12-2010 23:59:59 Мне нужно использовать часовой пояс пользователя для создания временных отметок, и я должен использовать часовой пояс, чтобы сначала создать временные отметки.

Помогите!

1 Ответ

0 голосов
/ 24 декабря 2010

Поскольку часовой пояс для Новой Зеландии +1300 UTC, где Лондон - ноль UTC, 13 x 3600seconds = 1293148800-1293102000

Поскольку вы уже сохраняете как целое число, вы должны всегда использовать ноль UTC пропускать часовой пояс при построении $dtime

Для тестирования

# date_create is procedural style
$obj =  date_create('24-12-2010 00:00:00', new DateTimeZone('europe/london'));
echo $obj->format('U');

$obj =  date_create('24-12-2010 00:00:00');
echo $obj->format('U');
...