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

    Formato data timezone 2016-11-25T16:46:45.865+01:00

    Ciao,
    durante un test di trasferimento si è registrata la data e l'ora dell'azione ed lo si è fatto in Europe/Rome alle 17.46. Volevo capire questo:

    la data che mi viene passata che devo ritradurre sempre con Europe/Rome è 2016-11-25T16:46:45.865+01:00 .

    utilizzando moment.js:

    codice:
    moment("2016-11-25T16:46:45+01:00").tz("Europe/Rome").format('DD/MM/YYYY HH:mm:ss');
    
    la conversione mi dice che "25/11/2016 16:46:45"

    Quello che non capisco è perchè non mi ritorna 17.46 come orario. E' sbagliata la data di partenza e la traduzione è corretta, quindi significa che non viene applicato nessun offset essendo che la data di partenza e quella finale hanno lo stesso timezone?



    Luca Bottoni's World
    www.bottonisworld.com

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,521
    Ciao,

    prova così:
    codice:
     moment("2016-06-25T16:46:45.865+01:00","YYYY-MM-DDTHH:mm:ss.SSS+Z").format('DD/MM/YYYY HH:mm:ss');
    In pratica la seconda stringa serve ad indicare la "disposizione" degli elementi della data (vedi la documentazione per i dettagli).
    Ovviamente l'orario cambia in base al periodo indicato per via dell'ora legale/solare. Lo stesso codice, ma con il mese di luglio al posto di novembre darà le 18:46 e non più 17:46 come per il mese di novembre.
    un esempio funzionante qui

  3. #3
    Grazie per la risposta,questo però mi conferma che se io traduco un timezone +1 di una data che era in +1 come la mia avrò la stessa data e orario che vedo non essendoci off set

    moment("2016-06-25T16:46:45.865+01:00","YYYY-MM-DDTHH:mm:ss.SSS+Z").format('DD/MM/YYYY HH:mm:ss');

    nel mio browser che è settato con Europe/Rome la traduzione è "25/06/2016 16:46:45"
    Luca Bottoni's World
    www.bottonisworld.com

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,521
    Figurati

    Questo esempio dovrebbe essere un pò più chiaro.

    Riporto anche qui:
    codice:
    <P>
    orario UTC (16:46+01:00 è un ora avanti rispetto a Greenwich, quindi UTC sono le 15:46)
    </P>
    <div id="div1">
    </div>
    <P>
    orario Italiano (15:46 UTC, in estate siamo a -2 rispetto Greenwich, quindi in tialia sono le 17:46)
    </P>
    <div id="div2">
    </div>  
    <P>
    orario New York (15:46 UTC, in estate siamo a +4 rispetto Greenwich, +6 rispetto all'Italia, quindi sono le 11:46)
    </P>
    <div id="div3">
    </div>
    <br/>
    <br/>
    <P>
    cambia solo la data (ora legale/solare), il resto come sopra 
    </P>
    <div id="div1a">
    </div>
    <div id="div2a">
    </div>  
    <div id="div3a">
    </div>
    codice:
        var div1 = $('#div1'); 
        var div2 = $('#div2');  
        var div3 = $('#div3'); 
        var data = moment.utc("2016-06-25T16:46:45.865+01:00");
        div1.text(data.format('DD/MM/YYYY HH:mm:ss')); 
        div2.text(moment.tz(data, "Europe/Rome").format('DD/MM/YYYY HH:mm:ss'));
        div3.text(moment.tz(data,"America/New_York").format('DD/MM/YYYY HH:mm:ss'));
        
        var div1a = $('#div1a'); 
        var div2a = $('#div2a');  
        var div3a = $('#div3a'); 
        var dataa = moment.utc("2016-11-25T16:46:45.865+01:00");
        div1a.text(dataa.format('DD/MM/YYYY HH:mm:ss')); 
        div2a.text(moment.tz(dataa, "Europe/Rome").format('DD/MM/YYYY HH:mm:ss'));
        div3a.text(moment.tz(dataa,"America/New_York").format('DD/MM/YYYY HH:mm:ss'));
    Ultima modifica di U235; 26-11-2016 a 00:30

  5. #5
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,521
    Quote Originariamente inviata da lbottoni Visualizza il messaggio
    Grazie per la risposta,questo però mi conferma che se io traduco un timezone +1 di una data che era in +1 come la mia avrò la stessa data e orario che vedo non essendoci off set
    In pratica quello che avviene facendo questo :

    codice:
     moment("2016-06-25T16:46:45.865+01:00");
    sarebbe:
    legge l'orario, rimuove quel +1 (nel senso che lo sottrae dall'orario), e aggiunge la differenza con l'italia (giugno +2).
    che a sua volta sarebbe lo stesso se facessimo:

    codice:
     moment.tz("2016-06-25T16:46:45.865+01:00","Europe/Rome");
    ovvero deduce l'utc (orario meno quel +1) ed aggiunge la differenza di fuso a utc, quindi in pratica per l'italia in estate sarebbe :
    2016-06-25T16:46:45.865+01:00 -> 16:46 - 1 = 15:46 +2(tz ita estate) = 17:46

    in inverno:
    2016-11-25T16:46:45.865+01:00 -> 16:46 -1 = 15:46 +1(tz ita inverno) = 16:46

    se fosse stato :
    2016-11-25T16:46:45.865+05:00 -> 16:46 -5 = 11:46 +1(tz ita inverno) = 12:46


    In Conclusione, per rispondere alla tua domanda iniziale:
    se fai :
    codice:
    moment("2016-11-25T16:46:45+01:00").tz("Europe/Rome").format('DD/MM/YYYY HH:mm:ss');
    è corretto che ti dia 16:46, perchè 16:46-1=15:46+1(tz inveno italia)=16:46.
    Le 17:46 le avresti impostando la data in estate.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.