2014-06-08 10 views
5

Quando creo o registrare aggiornamento sulle vele che scrivo questo a updateAt:Come impostare il fuso orario locale in Sails.js o Express.js

updatedAt: 2014-07-06T15:00:00.000Z 

ma sono in GMT + 2 ore (in questa stagione) e l'aggiornamento viene eseguito alle 16:00.

Ho lo stesso problema con tutti i campi datetime dichiarati nei miei modelli.

Come posso impostare il fuso orario giusto su Sails (o eventualmente Express)?

+0

impostare l'ora locale sul server in cui l'applicazione funzioni. Non è? – diproart

risposta

1

Cercare di risolvere il problema impostando il fuso orario sul server è un po 'miope. Cosa succede se ti sposti? O qualcuno in un altro paese accede alla tua applicazione? L'importante è che i timestamp nel database abbiano un fuso orario in essi codificato, in modo che tu possa tradurre all'ora corretta sul front-end. Cioè, se lo fai:

new Date('2014-07-06T15:00:00.000Z') 

nella console del browser, dovresti vederlo visualizzare la data e l'ora corrette per ovunque tu sia. Sails codifica automaticamente questo timestamp per te con i campi predefiniti updatedAt e createdAt; assicurati di utilizzare sempre un fuso orario quando salvi tutti i timestamp personalizzati nel database e dovresti stare bene!

0

Ho imparato a non impostare un fuso orario a livello di app (vedo perché gli autori delle vele hanno fatto in quel modo), tuttavia ho avuto un brutto periodo di tempo per eseguire una semplice query di corrispondenza delle date. Supponiamo che se crei un record utilizzando i metodi di modello predefiniti (questo contenente un campo data/ora aggiuntivo rispetto ai valori predefiniti), passando una data, che potresti passare nella stessa data in una query get e ottieni lo stesso record.

Ad esempio, supponiamo che il campo datetime sia chiamato "specialdate". Se creo un nuovo record tramite l'API con "specialdate" che equivale a "06-09-2014" (ignorando l'ora), non sono stato in grado di eseguire una query di ricerca in cui posso passare in "06-09-2014" e riprendi quel disco. Più delle query funzionano bene (se faccio una ricerca per una data maggiore di quella). Sono sicuro che si tratta di un problema di fuso orario, ma non sono riuscito a trovare una soluzione.

2

ho risolto il problema, è necessario impostare il file opzioni MySql per cambiare fuso orario UTC nella cartella config/connections.js impostazione a questo

devMysqlServer: { 
    adapter: 'sails-mysql', 
    host: '127.0.0.1', 
    user: 'root', 
    password: '***', 
    database: '**', 
    timezone: 'utc' 
    }, 
1

la migliore pianificazione dell'architettura qui, IMO, è quello di continua a utilizzare la formattazione isoDate di Sails.js. Quando l'utente carica il tuo sito web/app, l'isoDate verrà convertito nel fuso orario del suo client/browser, che di solito è impostato a livello di SO.

Ecco un esempio che è possibile testare con. Apri una console del browser ed esegui new Date().toISOString() e osserva l'ora impostata. Sarà basato sulle specifiche per isoDate 8601 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString). Ora, cambia l'ora del tuo sistema in un fuso orario diverso o cambia semplicemente l'ora nel tempo e salva (non dovresti dover ricaricare se stai usando la console di Chrome). Esegui nuovamente il comando nella console new Date().toISOString() e otterrai un tempo adeguato all'ora appena modificata.

Se desideri continuare a dimostrare a te stesso il tempo di utilizzo di Sails.js, utilizza Moment.js su un isoDate archiviato nel tuo database (creato da waterline ORM) come tale moment("2016-02-05T22:36:48.800Z").fromNow() e tu ". noteremo che il tempo è relativo all'ora del tuo sistema.

7

Il modo in cui ho trattato il problema dopo ore di ricerca:

Mettere process.env.TZ = 'UTC'; //whatever timezone you want

in config/bootstrap.js

+0

Funziona quando sono in esecuzione su sviluppo env, ma non funziona nella produzione env – Arshad

+0

questa è la soluzione perfetta per me. –

Problemi correlati