Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    diversa gestione timestamp php/mysql

    Ciao,
    se eseguo questa istruzione:

    mktime(01,0,0,03,25,2007);
    e da un db mysql ricavo il ts:
    select unix_timestamp("2007-03-25 01:00:00")

    ricevo lo stesso risultato, 1174780800.

    Se eseguo l'istruzione un paio di ore piu tardi, alle 2:58, i risultati sono diversi: 1174787880 per php e 1174784400 per mysql.

    Alle 3:01 tutto torna uguale, 1174784460 per tutti e due.

    Tutto nasce dal fatto che alle 2 di notte entra l'ora legale. Php continua ad andare avanti con il ts, per poi "tornare indietro" alle 3 di notte, ritornando a 1174784400 (ts delle 2). Mysql invece è come se rimanesse 'congelato' tra le 2 e le tre, dando come ts sempre 1174784400 (alle 2:00 come alle 2:58).

    Quando torna l'ora solare invece sia php che mysql seguono lo stesso comportamento: alle 2 del 28 ottobre vanno avanti di 3600 secondi, recuperando cosi quell'ora che avevano indietro.

    Pura curiosita:
    - qualcuno sa per quale motivo mysql gestisce l'entrata dell'ora legale, a marzo, in maniera diversa da php? discorso inverso: perchè per l'entrata dell'ora solare, a ottobre, hanno due comportamenti uguali? ci sono ragioni 'storiche', c'è un metodo migliore dell'altro ..?
    - se con l'ora legale, a marzo, gli orologi si spostano di un'ora avanti.. significa che l'ora solare (che dovrebbe essere il timestamp "puro") è un'ora indietro. Perchè il timestamp di php e mysql è indietro al timestamp dell'ora legale?
    :master:

    scusate se sono domande banali ma mi ci sto incartando

  2. #2

    Re: diversa gestione timestamp php/mysql

    Originariamente inviato da l'evangelista

    Pura curiosita:
    - qualcuno sa per quale motivo mysql gestisce l'entrata dell'ora legale, a marzo, in maniera diversa da php? discorso inverso: perchè per l'entrata dell'ora solare, a ottobre, hanno due comportamenti uguali? ci sono ragioni 'storiche', c'è un metodo migliore dell'altro ..?
    - se con l'ora legale, a marzo, gli orologi si spostano di un'ora avanti.. significa che l'ora solare (che dovrebbe essere il timestamp "puro") è un'ora indietro. Perchè il timestamp di php e mysql è indietro al timestamp dell'ora legale?
    :master:

    scusate se sono domande banali ma mi ci sto incartando
    Se provi a passare il timestamp a date() vedrai che ti dara' l'ora corretta. Il timestamp dipende da come e' settata l'ora del PC. Che poi queste ore nel pc sono due ... quella del BIOS che dovrebbe sempre essere GMT e quella del OS che applica lo spiazzamento del time zone e dell'ora legale se esistente. Questo almeno per unix e' abbastanza tassativo.

    se prendi un timestamp in ora 2-3 ed uno dopo le tre e lo applichi ad una funzione come date() che tiene conto dell'ora legale a prescindere dall'OS vedrai che l'ora viene correttamente applicata. Lo stesso vale per mysql.

    codice:
    echo date('Y-m-d H:i:s', mktime(2,30,0,3,25,2007)) . "
    "; // ora non esistente
    echo date('Y-m-d H:i:s', mktime(3,30,0,3,25,2007)) . "
    ";
    
    $query = "select from_unixtime('1174786200', '%Y-%m-%d %H:%i:%s')";  // ore 2.30
    Se non fai una forzatura scrivendo tu l'ora inesistente non dovresti mai riscontrarla leggendola con uno script su OS.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.