Javascript 使用moment.js将日期转换为UTC

Javascript 使用moment.js将日期转换为UTC,javascript,momentjs,Javascript,Momentjs,这可能是一个简单的答案,但我似乎找不到一种方法让moment.js以毫秒为单位返回UTC日期时间。以下是我正在做的: var date = $("#txt-date").val(), expires = moment.utc(date); 知道我做错了什么吗?发现了。在图书馆般的时刻,我敦促您阅读全部文档。这真的很重要 假设输入文本是根据用户的本地时间输入的: var expires = moment(date).valueOf(); 如果指示用户实际输入UTC日期/时间,则:

这可能是一个简单的答案,但我似乎找不到一种方法让moment.js以毫秒为单位返回UTC日期时间。以下是我正在做的:

var date = $("#txt-date").val(),
    expires = moment.utc(date);
知道我做错了什么吗?

发现了。在图书馆般的时刻,我敦促您阅读全部文档。这真的很重要

假设输入文本是根据用户的本地时间输入的:

 var expires = moment(date).valueOf();
如果指示用户实际输入UTC日期/时间,则:

 var expires = moment.utc(date).valueOf();

我使用这种方法,它是有效的。ValueOf对我不起作用

moment.utc(yourDate).format()

如果所有其他操作都失败,只需使用本地偏移量的倒数重新初始化即可

var timestamp = new Date();
var inverseOffset = moment(timestamp).utcOffset() * -1;
timestamp = moment().utcOffset( inverseOffset  );

timestamp.toISOString(); // This should give you the accurate UTC equivalent.
这是一条路,因为

moment().utc(date).format(...);

行为是否怪异…

您不需要一些东西来比较然后检索毫秒吗

例如:

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();

在这里,我传递date对象并将其转换为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);

截至:
moment.js版本2.24.0

假设您有一个本地日期输入,这是将日期时间时间输入转换为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

阅读此文档的矩量.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

这就是答案:

moment.utc(moment(localdate)).format()
localdate='2020-01-01 12:00:00'
时刻(本地日期)
//瞬间
矩.utc(矩(localdate)).format()
//2020-01-01T04:00:00Z

这对我很有效。其他人可能会发现它很有用

//日期=2020-08-31T00:00:00Z我位于丹麦(时区为+2小时)

time.utc(time(date).utc()).format()
//返回2020-08-30T22:00:00Z

time.utc(stringDate,format).toDate()
对我有效


时刻.utc(日期).toDate()
未编辑。

已编辑-已“轻松”删除:)如果我已经有一个带有时区的时刻日期时间,我如何将其转换为UTC?@Alexander-
.UTC()
,这不起作用。这只会更改日期上使用的方法,而不会更改日期本身。@coleen-是的,但通常会调用其中一个方法,例如
.format()
,它会发出UTC值。它无法更改内部日期值本身,因为
date
已在跟踪UTC时间戳。始终只有对其调用的方法决定是发出UTC时间还是本地时间。在这方面,力矩是相同的。这是根据文件工作的。将本地时间转换为UTC。这里有点可疑。我正在使用moment.js版本。2.17.1如果“yourdate”是“2017-10-14T21:00:00Z”(en-us),则上述代码段返回完全相同的结果“2017-10-14T21:00:00Z”,这显然不是utc,因为我在gmt+3。正确的结果应该是“2017-10-15T00:00:00+03:00”,您可以通过“时刻(yourDate).format()”获得此结果。请详细说明
moment().utc(日期).format(…)
”的奇怪行为。这种行为并不奇怪,它们是不同的方法。第一个
时刻。utc(日期)
表示
日期。第二个
时刻().utc(日期)
用于当前时间(
时刻()
),而
日期
参数是无用的,因为在这种情况下,
.utc()
不需要任何参数。这不起作用。工作原理是将
keepOffset
参数设置为true,如
moment(timestamp).toISOString(true)
moment.valueOf()和
(new Date())。getTime()
都返回UTC 1970年1月1日以来的毫秒数(这是标准值)
moment.utc(moment(localdate)).format()
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