2014-01-30 3 views
1

У меня есть метка времени, которую я пытаюсь преобразовать в другой часовой пояс. При этом мне нужно взять DST для учета.Временные метки PHP DateTime неверны

код Я использую ниже:

$date = new DateTime("@".$timestamp); 

    echo $date->format('Y-m-d H:i:s')."\r\n"; 

    $date->setTimezone(new DateTimeZone('Europe/Paris')); 
    echo $date->format('Y-m-d H:i:s')."\r\n"; // Pacific time 

    $date->setTimezone(new DateTimeZone('Europe/Athens')); 
    echo $date->format('Y-m-d H:i:s')."\r\n"; // Berlin time 

Выходной сигнал (который является правильным) является:

2014-01-30 20:24:48 
2014-01-30 21:24:48 
2014-01-30 22:24:48 

Однако, если изменить формат на «U», которое является значением, используемым в Date(), чтобы получить временные метки следующий вывод: это

1391113488 
1391113488 
1391113488 

Почему метки времени, не выходит с часового пояса fset применяется к ним?

+3

Unix метки времени всегда в UTC –

+4

Потому что они выходят в Unix метки времени (это то, что дает 'формат U') которые не имеют часовой пояс, но являются UTC –

+1

Определение отметки времени UNIX: секунды с полуночи 1 января 1970 UTC. Как бы временные диаграммы фигурировали в этом определении? – deceze

ответ

2

DateTime::getOffset даст вам смещение в секундах и DateTime::getTimestamp даст вам Unix метку времени, которая всегда UTC (дает такую ​​же, как $datetime->format('U')).

Так что для того, чтобы получить «метку времени» с зачетом сделать это:

$timestampWithOffset = $date->getTimestamp() + $date->getOffset(); 
+2

Это не временная метка UNIX, хотя и, следовательно, бесполезна. – deceze

+0

Нет, это не обязательно бесполезно. Это зависит от вашего варианта использования. – sjkm

+1

@sjkm: можете ли вы привести пример, где это может быть полезно? –

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