Prawdopodobnie i łatwa odpowiedź na to pytanie, ale nie mogę znaleźć sposobu, aby moment.js zwracał datę UTC w milisekundach. Oto co robię:
var date = $("#txt-date").val(),
expires = moment.utc(date);
Masz pojęcie, co robię źle?
javascript
momentjs
user1956816
źródło
źródło
.utc()
.format()
, która wyemituje wartość UTC. Nie może zmienić samej wewnętrznej wartości daty, ponieważDate
śledzi już znacznik czasu UTC. To zawsze tylko wywoływane metody określają, czy emitować czas UTC, czy czas lokalny. Pod tym względem moment jest taki sam.Używam tej metody i działa. ValueOf nie działa dla mnie.
źródło
Od:
moment.js version 2.24.0
powiedzmy, że masz lokalne wejście daty, jest to właściwy sposób konwersji danych wejściowych DateTime lub Time na UTC :
var utcStart = new moment("09:00", "HH:mm").utc();
lub w przypadku, gdy określisz datę
var utcStart = new moment("2019-06-24T09:00", "YYYY-MM-DDTHH:mm").utc();
Jak widać, wynik zostanie zwrócony w UTC:
//You can call the format() that will return your UTC date in a string utcStart.format(); //Result : 2019-06-24T13:00:00
Ale jeśli zrobisz to jak poniżej, nie zostanie przekonwertowany na UTC:
var myTime = new moment.utc("09:00", "HH:mm");
Ustawiasz tylko wejście na czas utc, to tak, jakbyś wspominał, że myTime jest w UTC, ... wyjście będzie 9:00
źródło
jest drogą do zrobienia, ponieważ
zachowuje się dziwnie ...
źródło
moment().utc(date).format(...)
?moment.utc(date)
jest dla parsowaniadate
. Drugimoment().utc(date)
służy do manipulowania bieżącym czasem (moment()
), adate
parametr jest bezużyteczny, ponieważ.utc()
w tym przypadku nie oczekuje się żadnych parametrów.To będzie odpowiedź:
localdate = '2020-01-01 12:00:00' moment(localdate) //Moment<2020-01-01T12:00:00+08:00> moment.utc(moment(localdate)).format() //2020-01-01T04:00:00Z
źródło
To zadziałało dla mnie. Inni mogą uznać to za przydatne.
// date = 2020-08-31T00: 00: 00Z Mieszkam w Danii (strefa czasowa to +2 godziny)
moment.utc(moment(date).utc()).format()
// zwraca 2020-08-30T22: 00: 00Zźródło
Jeśli wszystko inne zawiedzie, po prostu przeprowadź ponowną inicjalizację z odwrotnością lokalnego offsetu.
var timestamp = new Date(); var inverseOffset = moment(timestamp).utcOffset() * -1; timestamp = moment().utcOffset( inverseOffset ); timestamp.toISOString(); // This should give you the accurate UTC equivalent.
źródło
keepOffset
parametru na true, tak jak wmoment(timestamp).toISOString(true)
,tutaj przekazuję obiekt daty i konwertuję go na czas UTC.
$.fn.convertTimeToUTC = function (convertTime) { if($(this).isObject(convertTime)) { return moment.tz(convertTime.format("Y-MM-DD HH:mm:ss"), moment.tz.guess()).utc().format("Y-MM-DD HH:mm:ss"); } }; // Returns if a value is an object $.fn.isObject = function(value) { return value && typeof value === 'object'; }; //you can call it as below $(this).convertTimeToUTC(date);
źródło
To
moment.utc(stringDate, format).toDate()
zadziałało dla mnie.To
nie.moment.utc(date).toDate()
źródło
Przeczytaj dokumentację moment.js tutaj . Zobacz poniższy przykład i dane wyjściowe, w których konwertuję czas GMT na czas lokalny (moja strefa to IST), a następnie konwertuję czas lokalny na GMT.
// convert GMT to local time console.log('Server time:' + data[i].locationServerTime) let serv_utc = moment.utc(data[i].locationServerTime, "YYYY-MM-DD HH:mm:ss").toDate(); console.log('serv_utc:' + serv_utc) data[i].locationServerTime = moment(serv_utc,"YYYY-MM-DD HH:mm:ss").tz(self.zone_name).format("YYYY-MM-DD HH:mm:ss"); console.log('Converted to local time:' + data[i].locationServerTime) // convert local time to GMT console.log('local time:' + data[i].locationServerTime) let serv_utc = moment(data[i].locationServerTime, "YYYY-MM-DD HH:mm:ss").toDate(); console.log('serv_utc:' + serv_utc) data[i].locationServerTime = moment.utc(serv_utc,"YYYY-MM-DD HH:mm:ss").format("YYYY-MM-DD HH:mm:ss"); console.log('Converted to server time:' + data[i].locationServerTime)
Wyjście jest
Server time:2019-12-19 09:28:13 serv_utc:Thu Dec 19 2019 14:58:13 GMT+0530 (India Standard Time) Converted to local time:2019-12-19 14:58:13 local time:2019-12-19 14:58:13 serv_utc:Thu Dec 19 2019 14:58:13 GMT+0530 (India Standard Time) Converted to server time:2019-12-19 09:28:13
źródło
Czy nie potrzebujesz czegoś do porównania, a następnie odzyskania milisekund?
Na przykład:
let enteredDate = $("#txt-date").val(); // get the date entered in the input let expires = moment.utc(enteredDate); // convert it into UTC
Dzięki temu masz datę ważności w UTC. Teraz możesz uzyskać datę „teraz” w UTC i porównać:
var rightNowUTC = moment.utc(); // get this moment in UTC based on browser let duration = moment.duration(rightNowUTC.diff(expires)); // get the diff let remainingTimeInMls = duration.asMilliseconds();
źródło
moment.valueOf()
i(new Date()).getTime()
zwracają milisekundy od 1 stycznia 1970 UTC (jest to standard)