Наверное, и простой ответ на это, но я не могу найти способ заставить момент.js возвращать дату в формате UTC в миллисекундах. Вот что я делаю:
var date = $("#txt-date").val(),
expires = moment.utc(date);
Есть идеи, что я делаю неправильно?
javascript
momentjs
user1956816
источник
источник
.utc()
.format()
, который выдаст значение UTC. Он не может изменить само значение внутренней даты, потому что aDate
уже отслеживает метку времени в формате UTC. Всегда только вызываемые методы определяют, следует ли передавать время в формате UTC или местное время. Момент в этом отношении тот же.Я использую этот метод, и он работает. ValueOf у меня не работает.
источник
По состоянию на:
moment.js version 2.24.0
скажем, у вас есть локальный ввод даты, это правильный способ преобразовать ваш ввод dateTime или Time в UTC :
var utcStart = new moment("09:00", "HH:mm").utc();
или если вы укажете дату
var utcStart = new moment("2019-06-24T09:00", "YYYY-MM-DDTHH:mm").utc();
Как видите, результат будет возвращен в формате UTC:
//You can call the format() that will return your UTC date in a string utcStart.format(); //Result : 2019-06-24T13:00:00
Но если вы сделаете это, как показано ниже, он не будет преобразован в UTC:
var myTime = new moment.utc("09:00", "HH:mm");
Вы только устанавливаете свой ввод на время utc, как если бы вы упоминали, что myTime находится в UTC, .... вывод будет 9:00
источник
это путь, так как
ведет себя странно ...
источник
moment().utc(date).format(...)
?moment.utc(date)
для разбораdate
. Второйmoment().utc(date)
- для управления текущим временем (moment()
), иdate
параметр бесполезен, поскольку.utc()
в этом случае он не ожидает никаких параметров.Это сработало для меня. Другие могут счесть это полезным.
// date = 2020-08-31T00: 00: 00Z Я нахожусь в Дании (часовой пояс +2 часа)
moment.utc (moment (date) .utc ()). format () // возвращает 2020-08-30T22: 00: 00Z
источник
Если ничего не помогает, просто выполните повторную инициализацию с инверсией вашего локального смещения.
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
параметра значения true, напримерmoment(timestamp).toISOString(true)
,здесь я передаю объект даты и конвертирую его во время в формате 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);
источник
Это будет ответ:
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
источник
Прочтите эту документацию по moment.js здесь . См. Ниже пример и вывод, где я конвертирую время GMT в местное время (моя зона - IST), а затем конвертирую местное время в 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)
Выход
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
источник
Разве вам не нужно что-то сравнивать, а затем получать миллисекунды?
Например:
let enteredDate = $("#txt-date").val(); // get the date entered in the input let expires = moment.utc(enteredDate); // convert it into UTC
При этом у вас есть дата истечения срока в UTC. Теперь вы можете получить дату «прямо сейчас» в формате UTC и сравнить:
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()
и(new Date()).getTime()
возвращают миллисекунды с 1 января 1970 года по UTC (это стандарт)