Z obiektu DateTime interesuje mnie uzyskanie czasu w różnych strefach czasowych. Jak wyjaśniono w DateTime::setTimezone doc, to działa całkiem dobrze, gdy obiekt jest tworzony DateTime z ciągiem:PHP Obiekt DateTime - Konflikt datownika i stref czasowych
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";
$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Y-m-d H:i:sP') . "\n";
$date->setTimezone(new DateTimeZone('UTC'));
echo $date->format('Y-m-d H:i:sP') . "\n";
echo $date->getTimestamp() . "\n";
Powyższe przykłady wyświetli:
2000-01-01 00: 00: 00 + 12: 00
2000-01-01 01: 45: 00 + 13: 45
31.12.1999 12: 00: 00 + 00: 00
teraz jest interesująca część: Jeśli odbierzemy w górę nasz znacznik czasu i zainicjować z nim obiekt DateTime zgodnie z instrukcją obsługi.
$date2 = new DateTime('@946641600');
$date2->setTimezone(new DateTimeZone('Pacific/Nauru'));
echo $date2->format('Y-m-d H:i:sP') . "\n";
$date2->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date2->format('Y-m-d H:i:sP') . "\n";
$date2->setTimezone(new DateTimeZone('UTC'));
echo $date2->format('Y-m-d H:i:sP') . "\n";
echo $date2->getTimestamp() . "\n";
I tu mamy: // [edit] humm ... Niestety, to wyjście jest złe ...
31.12.1999 12: 00: 00 + 00: 00
1999- 12-31 12: 00: 00 + 00: 00
31.12.1999 12: 00: 00 + 00: 00
UTC zawsze !!! Nie możemy już zmienić strefy czasowej!?!
Czy to PHP, czy to ja? Wersja 5.3.15
Czy nie należy określać strefy czasowej na tworzenie instancji z sygnaturą czasową? –
Otrzymuję inny wynik tutaj http://codepad.viper-7.com/zAv8dz – Baba
Działa dobrze na wersji 5.3.15 ....... – Baba