óraátállítás körüli problémák

Egy ideje online rádió fejlesztésében veszek részt. Ez a rádió teljes egészében beavatkozás nélkül működik. Hétvégén legenerálja a következő heti műsort, aztán az adott napon a player mindig veszi a következő napi műsort, aztán éjféltől az szól. Az óraátállítás viszont kissé gondolkodósra sikerült. Az addig okés, hogy 24, 23 vagy 25 órányi műsort generálok. A megjelenítésnél (mi szól most, illetve a következő x szám) már nem teljesen triviális. Mindig tudnom kéne az átálláskor, hogy a 2 és 3 óra közti időszakban mi a helyzet. Pedig nem tudom. Mert php hibába futottam.

$zone = new DateTimeZone(‘Europe/Budapest’);
$date = new \DateTime(‘now’, $zone);
var_dump($date->format(‘r I’), date(‘r I’));

Ez a kód nyári szerint 2 és 3 között azt adja vissza, hogy már téli van. A date a helyes eredményt adja vissza. OSX és Ubuntu alatt is reprodukálható a téma.
Verziók:
PHP 5.4.7 (cli) (built: Oct 28 2012 08:17:31)
PHP 5.3.10-1ubuntu3

Úgy tűnik a DateTime nem jól kérdezi le a rendszeridőt.

Most pedig megnézem, a forráskódban, hogy mi okozza a gebaszt.

Update:

Olyankor amikor stringet kap, akkor ugyan az a lib parseolja fel mint a strtotime() így az is hibás eredményt ad. Egyetlen esetben sikerült daylight save time biztos módon megkapnom a datetime objectet, ha így inicializáltam:

$date = new \DateTime(‘@’. time());
$date->setTimeZone(new DateTimeZone(date_default_timezone_get()));

Most nem fogok mélyebben belemászni, hogy mindez miért van, de valahol egy elég régi bug van, mert a neten is található néhány megválaszolatlan poszt a témában.

2 thoughts on “óraátállítás körüli problémák

  1. Ezért szeretek végig unixtimeal dolgozni és csak megjelenitésnél állítani elő stringet.

    A facebookon is voltak(talán vannak is) ezzel durva bugok, hogy hibásan jelenítik meg a dátumokat a DST miat.

  2. Nem lenne gond, sőt sokkal tisztább kódot kapok datetime használatával a modify miatt, de ilyen speciális esetben előjön. Viszont a bug nem datetime specifikus hanem php timelib specifikus.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.