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?
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?
Odpowiedzi:
Można to znaleźć w dokumentacji . Z chwilą jak w bibliotece zachęcam do przeczytania całej dokumentacji. To naprawdę ważne.
Zakładając, że tekst wejściowy jest wprowadzany w oparciu o czas lokalny użytkownika:
var expires = moment(date).valueOf();
Jeśli użytkownik zostanie poinstruowany, aby wprowadzić datę / godzinę UTC, wówczas:
var expires = moment.utc(date).valueOf();
.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.
moment.utc(yourDate).format()
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
moment.utc(date).format(...);
jest drogą do zrobienia, ponieważ
moment().utc(date).format(...);
zachowuje się dziwnie ...
moment().utc(date).format(...)
?
moment.utc(date)
jest dla parsowaniadate
. Drugi moment().utc(date)
służy do manipulowania bieżącym czasem ( moment()
), a date
parametr jest bezużyteczny, ponieważ .utc()
w tym przypadku nie oczekuje się żadnych parametrów.
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.
keepOffset
parametru na true, tak jak w moment(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);
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
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();
moment.valueOf()
i (new Date()).getTime()
zwracają milisekundy od 1 stycznia 1970 UTC (jest to standard)