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


95

对此可能是简单的答案,但我似乎找不到任何方法使moment.js返回以毫秒为单位的UTC日期时间。这是我在做什么:

var date = $("#txt-date").val(),
    expires = moment.utc(date);

知道我在做什么错吗?

Answers:


101

这可以在文档中找到。借助像片刻的图书馆,我敦促您阅读整个文档。这是真正重要的。

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

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

如果指示用户实际输入UTC日期/时间,则:

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

22
编辑-删除“轻松”。:)
Matt Johnson-Pint 2015年

6
如果我已经有了带有时区的即时日期时间,如何将其转换为UTC?
アレックス

@Alexander -.utc()
马特·约翰逊品脱

2
那不行 这只会更改日期使用的方法,而不会更改日期本身。
Colleen

2
@Colleen-是的,但是通常会调用其中一种方法,例如.format(),它将发出UTC值。它不能更改内部日期值本身,因为aDate已经在跟踪UTC时间戳。始终只是调用它的方法来确定是发出UTC还是本地时间。在这一点上,时刻是相同的。
马特·约翰逊

53

我使用这种方法,它的工作原理。ValueOf对我不起作用。

moment.utc(yourDate).format()

2
这根据文档工作。将当地时间转换为UTC。
Kishor Pawar

1
这里有些鱼。我正在使用moment.js ver。2.17.1,如果“ yourdate”为“ 2017-10-14T21:00:00Z”(zh-cn),则上述代码段将返回完全相同的结果“ 2017-10-14T21:00:00Z”,这显然不是utc,因为我在gmt + 3。正确的结果是“ 2017-10-15T00:00:00 + 03:00”,您可以通过“ moment(yourDate).format()”获得此结果。
XDS

14

作为 : moment.js version 2.24.0

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


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

是要走的路,因为

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

确实很奇怪...


1
您能否详细说明的怪异行为moment().utc(date).format(...)
Freeman Lambda

2
行为并不奇怪,那些是​​不同的方法。首先moment.utc(date)解析date。第二个moment().utc(date)是用于操纵当前时间(moment())的date参数,该参数是无用的,因为.utc()在这种情况下,该参数不需要任何参数。
CodingHamster

2

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

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

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


1

如果其他所有方法均失败,则只需使用本地偏移量的反函数重新初始化即可。

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)
Chris Haines

1

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

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

0

在此处阅读一下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

-1

您不需要进行比较然后检索毫秒的内容吗?

例如:

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()都返回毫秒自1970年1月1日UTC(这是一个标准)
Drenai
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.