【发布时间】:2014-06-11 13:42:33
【问题描述】:
可能很容易回答这个问题,但我似乎无法找到让 moment.js 以毫秒为单位返回 UTC 日期时间的方法。这是我正在做的事情:
var date = $("#txt-date").val(),
expires = moment.utc(date);
知道我做错了什么吗?
【问题讨论】:
标签: javascript momentjs
可能很容易回答这个问题,但我似乎无法找到让 moment.js 以毫秒为单位返回 UTC 日期时间的方法。这是我正在做的事情:
var date = $("#txt-date").val(),
expires = moment.utc(date);
知道我做错了什么吗?
【问题讨论】:
标签: javascript momentjs
这是in the documentation。对于像图书馆这样的时刻,我敦促您阅读整个文档。这真的很重要。
假设输入文本是根据用户的当地时间输入的:
var expires = moment(date).valueOf();
如果指示用户实际输入 UTC 日期/时间,则:
var expires = moment.utc(date).valueOf();
【讨论】:
.utc()
.format(),它会发出 UTC 值。它不能更改内部日期值本身,因为 Date 已经在跟踪 UTC 时间戳。它总是只是调用它的方法来确定是发出 UTC 还是本地时间。在这方面,时刻是相同的。
我使用这种方法并且它有效。 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.
【讨论】:
keepOffset 参数设置为true,如moment(timestamp).toISOString(true),
moment.utc(date).format(...);
是要走的路,因为
moment().utc(date).format(...);
确实表现得很奇怪...
【讨论】:
moment().utc(date).format(...)的怪异行为?
moment.utc(date) 用于parsing 和date。第二个moment().utc(date) 用于manipulating 当前时间(moment()),date 参数没有用,因为在这种情况下,.utc() 不需要任何参数。
您不需要进行比较然后检索毫秒数吗?
例如:
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 以来的毫秒数(这是一个标准)
在这里,我正在传递日期对象并将其转换为 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 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.js here 的文档。 请参阅下面的示例和输出,其中我将 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'
moment(localdate)
//Moment<2020-01-01T12:00:00+08:00>
moment.utc(moment(localdate)).format()
//2020-01-01T04:00:00Z
【讨论】:
这对我有用。其他人可能会觉得它很有用。
let date = '2020-08-31T00:00:00Z'
moment.utc(moment(date).utc()).format() // returns 2020-08-30T22:00:00Z
【讨论】:
这个moment.utc(stringDate, format).toDate() 为我工作。
这不是。moment.utc(date).toDate()
【讨论】:
这对我有用:
const localtime = 1622516400000
moment(localtime).utc(true).format()
【讨论】: