Sembra che si stia tentando di consentire all'utente di scegliere una data e un'ora basate su UTC. Pertanto, il modo migliore sarebbe quello di far funzionare il raccoglitore in modalità UTC quando crea il momento per iniziare. Non ho familiarità con questo particolare datetimepicker, ma assumendo da qualche parte internamente lo fa qualcosa di simile:
var m = moment([year, month-1, day, hour, minute]);
Poi si dovrebbe invece fare questo:
var m = moment.utc([year, month-1, day, hour, minute]);
(Le variabili riportate qui sarebbe venuta dall'interno del controllo di selezione.)
Idealmente, il controllo di selezione deve includere una funzione per impostare la modalità UTC in modo che possa eseguire questa operazione internamente, quando viene indicata da voi.
Se non dispone di tale funzione, è ancora possibile compensare. Sfortunatamente, non puoi chiamare semplicemente .utc()
, dato che darebbe un tempo diverso da quello scelto dall'utente. Quindi, dovrai compensare spostando l'ora UTC dall'offset del momento originale.
var m = // moment value from the picker
var result = moment(m).utc().add(m.utcOffset(), 'm');
È quindi possibile chiamare format
o quello che volete sul risultato. Si noti che il momento originale è clonato con moment(m)
, in modo tale che l'offset non vada perso e il passaggio a UTC non interferisca con il comportamento interno del raccoglitore.
Inoltre, notare che lo spostamento di come questo è generalmente un trucco, e se fatto male può portare a errori. Qui va bene, perché il momento è già in modalità UTC quando viene applicata la regolazione. Ma come soluzione generale, lo spostamento dovrebbe essere evitato. L'opzione migliore è avere il controllo inserito nella modalità UTC per cominciare.
La prego di fornire qualche codice o un violino per dimostrare? Questo è abbastanza facile con il momento, ma non ho idea di quali API stai usando in questo controllo datetimepicker. –