Получить смещение часового пояса в PHP с учетом метки времени Unix - PullRequest
3 голосов
/ 08 октября 2009

У меня есть метка времени Unix, которая поступает из базы данных, которая (к сожалению) находится в часовом поясе с определенным значением +3600 или +7200, в зависимости от того, является ли это летним временем или нет. Это никогда не было проблемой прежде, но наш веб-сайт в настоящее время перемещается к более международной аудитории, и из-за взаимодействия Javascript с указанными временными метками мне нужно преобразовать временную метку без какого-либо смещения.

Итак, как мне, учитывая только временную метку Unix, получить смещение для часового пояса в момент этой временной метки? Я просматриваю документы по PHP, но есть так много функций даты / времени, что я немного потерян.

Я использую PHP 5.2.3

Ответы [ 5 ]

4 голосов
/ 08 октября 2009

Я снова чувствую себя глупо, отвечая на свой вопрос, но я только что нашел функцию gmstrftime. Кажется, делать именно то, что я хочу. Спасибо всем, хотя!

2 голосов
/ 08 октября 2009

Вы не можете сделать это в общем случае. Временная метка Unix - это просто количество секунд с начала эпохи Unix, и она не содержит никакой информации о временной отметке.

Одна вещь, которая может работать для вас, это выяснить, происходит ли заданная временная метка в то время, когда действует летнее время, и затем корректировать ее соответствующим образом. Однако такой подход не сработает за пределами границ (поскольку для каждой временной отметки в часе сразу после начала летнего времени и непосредственно перед его окончанием существует 2 значения).

В будущем вам, вероятно, лучше хранить временные метки в формате UTC, чтобы избежать именно такой проблемы.

2 голосов
/ 08 октября 2009

Если вы под меткой времени unix подразумеваете время unix (секунды с начала эпохи), смещение всегда равно 0. Время определяется как 00:00:00 UTC, 1 января 1970 года. Обратите внимание на время UTC со смещением 0.

Применение смещения часового пояса и dst обрабатывается библиотеками, которые преобразуют метку времени unix в структуры даты / времени. (Я не знаю php, но, например, в C функция localtime берет метку времени Unix, применяет информацию о часовом поясе либо из окружения, либо из файла / etc / localtime, и выдает структуру секунд, минут, часов и т. Д ).

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

U может использовать это:

$timezone_offset = date('O');

Возвращает разницу по времени по Гринвичу (GMT) в часах.

[источник]

0 голосов
/ 08 октября 2009

Это бы сработало?

$tz = date("O", $time);

Вы также можете сделать:

Отсюда:

http://www.php.net/manual/en/function.date.php

...