Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    129

    Conversione datetime in altro fuso orario

    Ciao a tutti,
    avrei la necessità di far visualizzare all'utente lcune date memorizzate nel db secondo la sua provenienza, quindi tenendo conto del timezone dell'utente fermo restando che su MySql è tutto con orario inglese (-2 ore).

    So che php ha una classe apposita, DateTime, che fa parecchie cose, ma sebbene abbia consultato il manuale non sono riuscito a trovare una soluzione praticabile che faccia al caso mio, o meglio, non so bene come sfruttarle non conoscendo le funzionalità dei suoi metodi.

    Ho provato quanto segue, che ovviamente non basta. Come faccio ad estrarre dall'oggetto $myDateTime il parametro convertito?
    Codice PHP:
    $userTimezone = new DateTimeZone('Europe/Rome');
    $myDateTime = new DateTime("$data_da_convertire"$gmtTimezone); 
    Grazie mille anticipatamente!

    Un saluto,
    Marco

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Ti basta stampare la data tramite il metodo format, o forse intendevi altro?

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    129
    è banale la domanda, ma non conoscendo la classe non riesco a farla funzionare...

    Nel db ho tutte datetime registrate con fuso orario di Londra, vorrei convertirle nell'equipollente orario italiano.

    Esempio:
    invio messaggio 2012-08-30 13:33:14 (nel db)
    l'utente italiano deve vedere 2012-08-30 15:33:14 (stampato da php)

    Codice PHP:
    $userTimezone = new DateTimeZone('Europe/London');
    $myDateTime = new DateTime("$data_spedizione"$userTimezone);
    $abc $myDateTime->format('Y-m-d H:i:sP');
    echo 
    "abc:".$abc."
    "


  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da galamarco
    è banale la domanda, ma non conoscendo la classe non riesco a farla funzionare...

    Nel db ho tutte datetime registrate con fuso orario di Londra, vorrei convertirle nell'equipollente orario italiano.

    Esempio:
    invio messaggio 2012-08-30 13:33:14 (nel db)
    l'utente italiano deve vedere 2012-08-30 15:33:14 (stampato da php)

    Codice PHP:
    $userTimezone = new DateTimeZone('Europe/London');
    $myDateTime = new DateTime("$data_spedizione"$userTimezone);
    $abc $myDateTime->format('Y-m-d H:i:sP');
    echo 
    "abc:".$abc."
    "

    L'esempio da te mostrato ti funziona o no? Quali problemi riscontri?

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    129
    Negativo, l'esempio mostrato non funziona, non modifica la data originaria aggiungendo o togliendo ore, stampa nuovamente la stessa data/ora di partenza.

    In sintesi: fa nulla.

    Andando per logica credo che occorra creare 2 oggetti "DateTime", uno con fuso orario di Londra, uno con fuso orario di Roma. E questo lo riesco a fare.
    Poi però bisogna spiegare a php che voglio convertire l'orario di Londra secondo il fuso orario italiano e questo non lo so fare...

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    129
    Ho parzialmente risolto il problema, nel senso che sono riuscito a convertire da un fuso orario all'altro, ma ora si pone ancora il problema dell'ora solare/legale.

    Andiamo per step.
    La conversione da un fuso orario all'altro l'ho risolta così:
    Codice PHP:
    $TimezonePartenza = new DateTimeZone('Europe/London');
    $TimezoneArrivo = new DateTimeZone('Europe/Rome');

    $Datadipartenza = new DateTime("$data_spedizione"$TimezonePartenza);
    $Datadipartenza->setTimezone($TimezoneArrivo);
    $valore_finale $Datadipartenza->format('Y-m-d H:i:s P e');
    echo 
    "data_spedizione: [b]$valore_finale[/b]
    "

    Il codice aggiunge 1 ora, l'ufficiale differenza tra Londra e Roma. Manca però la valutazione di ora solare/ora legale, quindi ancora non va bene

    Nel caso italiano infatti, manca ancora 1 ora, quella dovuta all'ora solare in corso.
    Come posso aggiungere a $valore_finale 1 ora se siamo nel periodo dell'ora solare? Immagino che ci sia una funzione apposita di php...

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    129
    Premesso che spero non sia solo un'illusione, credo di aver risolto l'enigma predisponendo la seguente funzione che posto qualora possa essere utile anche ad altri (mi sembra sia un problema piuttosto comune quello del server da una parte e gli utenti dall'altra).

    Non so, e non mi rimane che aspettare per vedere, se al cambio di ora legale/solare si verificheranno problemi o meno, se una mano più esperta potesse confermare o smentire questo, ne sarei felice.

    Codice PHP:
    function converti_ora_db($data,$TimezoneArrivo "Europe/Rome") {
        
    //fuso orario di partenza del server di KarmaHost
        
    $timezone_iniziale = new DateTimeZone('Greenwich');
        
    //fuso orario di partenza del server di KarmaHost
        
    $timezone_finale = new DateTimeZone("$TimezoneArrivo");
        
        
    $Datadipartenza = new DateTime("$data"$timezone_iniziale);
        
    $Datadipartenza->setTimezone($timezone_finale);
        
        
    //aggiungendo "P" vedo le ore di differenza, aggiungendo "e" vdo il nome del fuso orario nuovo
        
    $data_con_nuovo_fusorario $Datadipartenza->format('Y-m-d H:i:s');    

        return 
    $data_con_nuovo_fusorario;

    Un saluto,
    Marco

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.