letni/zimni čas dibi vs mysqli rubrika: Programování: PHP
Zdravím,
pokud udělám mysqli_query($link,"SELECT caszalozeni FROM novinky ORDER BY caszalozeni DESC LIMIT 1");
dostanu v pořádku 2014-10-26 00:10:28
pokud to stejné udělám pomocí dibi:: query dostávám 2014-10-26 23:10:28
Mám nastaveno date_default_timezone_set('Europe/Prague'); co ještě kde upravit? googlím od rána, ale bez výsledku, chyba bude v tom připojení k dibi, ale netuším jak tam definovat set locale :(
Data typu TIMESTAMP jsou před uložením převedena do časové zóny UTC a při vybírání zase zpět z UTC do nastavené časové zóny MySQL serveru a pokud je při ukládání i vybírání časová zóna stejná, tak se vrátí ta samá data, co byla uložena. Pokud před voláním mysqli_query()
se časová zóna nijak nenastavuje, tak se dá předpokládat, že je pořád stejná. Typ DATETIME toto nedělá.
Dibi nastavuje časovou zónu extra pomocí SET time_zone='$config[timezone]'
, přičemž defaultně je 'timezone' => date('P')
a date('P')
vrací teď +01:00, 26. 10. v 00:10:28 to vracelo +02:00. Časová zóna v době uložení je tedy jiná, než časová zóna při vybírání a tam vzniká ten hodinový rozdíl.
Nepíšeš pomocí čeho ty data ukládáš, ale pokud také pomocí dibi, tak databáze dostala příkaz k uložení 26. 10. 00:10 v časové zóně +02:00, vnitřně si uložila 25. 10. 22:10 a pokud ty data chceš teď vytáhnout, tak server dostane příkaz k vytažení 25. 10. 22:10 do aktuální časové zóny +01:00 a vytáhne 23:10.
K vyřešení (nebo aspoň pochopení) by mohlo stačit při připojování předat parametr timezone
:
$options = array( 'driver' => 'mysql', 'host' => 'localhost', // ... 'timezone' => date_default_timezone_get(), // např. takto );
Dej vědět, jestli to pomohlo.
Pro zobrazení všech 2 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem: