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

    Problema Fuso orario e formato data dalla data del server

    Ho un problema che stupidamente non avevo previsto perché non pensavo di avere utenti da tutto il mondo.

    Ho un'applicazione che a determinate operazioni viene assegnata data ed ora dal server.
    Queste informazioni, importanti per il lato server, vengono anche visualizzate dal client.
    Il mio server è in Italia ed è impostato ad UMT+1

    Un client dal Brasile, dal Canada o dall'India vede un'ora che non è la sua ed anche il formato proposto gli è scorretto.

    Come posso fare?
    I punti fermi sono i seguenti:
    - La data ed ora viene prelevata "obbligatoriamente" dal server ed archiviata.
    - Per la visualizzazione lato client utilizzo javascript.

    Stavo pensando, all'avvio dell'applicazione, di fare subito un controllo sulla differenza della data del server con quella del client, questa differenza inserirla in una variabile pubblica ed usarla successivamente per aumentare o diminuire la data del server.

    Per quanto riguarda la forma di espressione della data, non so come fare datosi che non so dove si trova il client.

    Aspetto dei suggerimenti.

    Grazie
    Io nella vita ho visto cose che voi astemi neanche potete immaginare.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    basta che estrai la data del server dal browser utente con date.getTimezoneOffset() e sommi/sottrai durante il print della tua ora normale, per sapere il formato preleva window.navigator.language e imposta un formato per i diversi paesi.
    Logiqo.org gestionale per perizie infortunistiche.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2014
    residenza
    Voltati
    Messaggi
    913
    Per formattare la data puoi usare Intl.DateTimeFormat - https://developer.mozilla.org/en-US/...DateTimeFormat
    No

  4. #4
    il problema l'ho risolto in parte.
    L'adattamento al fuso orario del client è OK. Ora è in grado di vedere qualsiasi data e ora memorizzata dal server (indipendentemente dalla posizione degli utenti) nel proprio fuso orario.
    Ovvero: Se un utente in Australia effettua una movimentazione, vede il periodo nel proprio fuso (ma è stato memorizzato con Fuso IT).
    Se un utente brasiliano vede le movimentazioni dell'australiano, le vede nel proprio fuso.

    E qui è tutto OK - Se necessario fornisco la routine utilizzata lato client/server

    Ora il problema è sempre il solito: Far digerire un corretto formato di data ora a JS, che in queste cose è sempre stato abbastanza sordo. Attualmente Intl.DateTimeFormat mi da "data non valida"

    Il valore "data e ora" (proveniente dal server) che possiedo è questo: 30/12/1025 09.32.21
    La devo prima rendere digeribile a JS per poi passarla a DateTimeFormat

    Ho fatto un po' di prove ma nada, devo per forza smontare tutta la data e ricostruirla?
    Io nella vita ho visto cose che voi astemi neanche potete immaginare.

  5. #5
    Ho risolto in questo modo per il formato della data e ora
    codice:
     function ConvertDataTime(DtTm) {
      LangCli=window.navigator.language;
      if (LangCli!='it-IT') {
       // separazione Data e Ora e modifica separatori orario
       var VtD_O=DtTm.split(' ');
       var NewOra=VtD_O[1].replace(/\./g,':')
       
       // separazione giorno mese e anno
       var VtGMA=VtD_O[0].split('/');
       
       // ricomponi nuova data AA/MM/GG e genera data valida
       var NewDate=new Date(VtGMA[2]+'/'+VtGMA[1]+'/'+VtGMA[0]);
       
       // converti formato secondo il linguaggio del client
       NewDate=new Intl.DateTimeFormat(LangCli).format(NewDate);
       
       // aggiungi l'ora
       DtTm=NewDate+' '+NewOra; 
      }
      return DtTm;
     }
    
    MioTempo="22/11/2015 09.22.31";
    alert(ConvertDataTime(MioTempo));
    Io nella vita ho visto cose che voi astemi neanche potete immaginare.

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    539
    Se necessario fornisco la routine utilizzata lato client/server
    se lo fai ti ringrazio

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Non devi smontare nulla, puoi anche aggiungere un una funzione che agisce sul dom e modifica le date o la data...
    Logiqo.org gestionale per perizie infortunistiche.

  8. #8
    Quote Originariamente inviata da marino51 Visualizza il messaggio
    se lo fai ti ringrazio
    Lato client:
    codice:
    <script>
     var data = new Date();
     TimeZone=data.getTimezoneOffset(); // differenza di orario da quello UTC. Il valore è necessario al server per capire che orario deve far visualizzare al client.
    </script>
    ora, in JS, ho la variabile TimeZone contenente la differenza di minuti dall'ora UTC
    Questa variabile va passata alla routine lato server, ognuno la passa come vuole. Io per necessità l'ho passata in modalità asincrona datosi che non dovevo abbandonare la mia pagina.

    La mia routine lato server è nel file "ReadConfig.asp" che al suo interno imposta diversi parametri.
    Ora quello che segue è in ASP ma non credo ci siano difficoltà per tradurlo in PHP o altro linguaggio.

    codice:
    <%@LANGUAGE="VBSCRIPT"%>
    <script runat="server" language="jscript">
    function OffSetTimeSrv() {
     var d = new Date();  // data e ora del server
     var offset = d.getTimezoneOffset(); // differenza di minuti dall'ora UTC
     return offset;
    }
    </script>
    
    <%
    TimeZoneCli=request.QueryString("TimeZone") 'qui recupero la TimeZone del client che ho passato come parametro.
    TimeZoneSrv=OffSetTimeSrv() ' la TimeZone del server
    
    ' creo 2 cookie contenenti i 2 TimeZone. Uso un cookie in modo da poterli recuperare quando voglio
    Response.Cookies("www.mysite.it") ("TimeZoneCli")=TimeZoneCli
    Response.Cookies("www.mysite.it") ("TymeZoneSrv")=TimeZoneSrv
    %>
    Ora so esattamente le differenze di tempo da l'ora UTC sia per in server che per il client.
    A questo punto, dove occorre posso effettuare la modifica dell'ora; sempre lato server. Vediamo come:

    codice:
    <%
     DataOra=MiaDataOra ' la data e ora da cambiare secondo le necessità del client
    
     TimeZoneSrv=Request.Cookies("www.mysite.it") (TimeZoneSrv) ' recupero cookie Srv
     TimeZoneCli=Request.Cookies("www.mysite.it") (TimeZoneCli) ' recupero cookie Cli
    
     DataOra=DateAdd("n",TimeZoneSrv,DataOra) ' aggiungo o elimino i minuti di Srv per portare la data a UTC
    
     DataOra=DateAdd("n",-TimeZoneCli,DataOra) ' aggiungo o elimino i minuti di Cli per portare la data da UTC a Zone Cli. Da notare il segno - prima di TimeZoneCli. Questo è essenziale per ribaltare il segno della variabile, altrimenti funziona al contrario.
    
    response.write "La data cambiata: "&DataOra
    %>
    Ultima modifica di SoloWiFi; 20-06-2015 a 09:45
    Io nella vita ho visto cose che voi astemi neanche potete immaginare.

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.