2013-08-30 3 views
1

Я изучал, как временная метка Unix может учитывать переход на летнее время, и здесь, кажется, много запутанных ответов о том, что это не имеет значения, или просто установите его в europe/london или используйте функцию, получающую локальную время. Это все еще не учитывает летнее время! вот некоторые тестовый код:Как временные метки Unix учитывают переход на летнее время?

date_default_timezone_set('Europe/London'); 
$timestamp_time = date("hi", 1377853200); 

echo $timestamp_time; 

Это возвратит час и минуты Отметка времени в час быстрее, чем на самом деле (он установлен в 9 утра, возвращается 10 утра). Эта временная метка была сделана с использованием онлайн-конвертера, установленного в GMT (+0), я использовал различные конвертеры, так что это не просто разрыв. Я ДОЛЖЕН использовать GMT для проекта, для которого это необходимо. Может ли кто-нибудь уточнить, как я могу разрешить переход на летнее время или это уже разрешено? Также быстрое объяснение, почему оно делает то, что будет очень полезно.

Я полагаю, что, наконец, мне нужно знать, как действовать дальше, использовать ли мой код для его разрешения, например, если зимние месяцы -1 час в летние месяцы + 1 час? это кажется смешным решением ... Любая помощь будет отличной. Спасибо.

ответ

3

Временная метка unix не содержит данных о часовом поясе. Это UTC и не имеет настроек DST.

Вы должны преобразовать время (например, в классы DateTime() и DateTimeZone() в php) внутренне в правильный часовой пояс, и он автоматически настроится на DST и смещение временной зоны на основе даты.

+0

так адаптировать код учитывая то, что будет выглядеть? :) – Aaron

+0

Вот реализация с DateTime на основе приведенного кода :) '$ date = new DateTime (« @ 1377853200 », новый DateTimeZone (« Европа/Лондон »)); echo $ date-> format ('hi'); ' – riekelt

0

Попробуйте установить соответствующий язык с помощью setlocale, а затем разобрать дату с помощью strftime. php.net имеет довольно подробный пример того, как этого достичь: http://php.net/manual/en/function.setlocale.php. strftime принимает временную метку в качестве параметра, поэтому никаких конверсий не требуется.

Ваш код будет выглядеть как-то вдоль линий

setlocale("en_GB"); // example 

$timestamp_time = strftime("%H%M", 1377853200); 

echo $timestamp_time; 
+0

, чтобы вы знали, что это все еще возвращает его на час быстрее: P – Aaron

+0

вы проверили правильную строку часового пояса для вашей операционной системы и локали на странице, с которой я связан, или копировать/вставить? :) –

+0

да проверен дважды. не волнуйтесь, этот парень решил это решить :) – Aaron

Смежные вопросы