Momentjs 如何将时间字符串正确转换为自"utc start of current day"以来的时间偏移量



好吧,我有一个时间字符串,如"06:00:00+00"和"06:00:00+01",我希望将它们转换为文字以显示当前偏移量为"UTC 零"。

我尝试的代码:

const v="06:00:00+00"
const fmt = "hh:mm:ss Z"
const m = moment(v, fmt).diff(moment(v, fmt).startOf('day'));
console.log(m);
console.log(m/(3600*1000));

但是,这会记录"8 小时"。 - 好像它使用我的本地时区。 - 尝试删除时区参数fmt = "hh:mm:ss"使其忽略时区。

那么我该如何才能做到这一点呢?(是的,这意味着如果 UTC 尚未在指定日期内,则整数可能是负数(。

一个具有核心JS的解决方案,可以与UTC进行比较:

function getTimeDiff(timeString) {
let curDate = new Date().toISOString().split('T')[0];
return (new Date(`${curDate}T${timeString}00`).getTime() - new Date(`${curDate}T00:00:00Z`).getTime())/(3600 * 1000);
}
console.log(getTimeDiff("06:00:00+01"));
console.log(getTimeDiff("06:00:00-07"));
console.log(getTimeDiff("20:00:00-07"));

这是使用 moment(( 中的 utc(( 的解决方案

const v="06:00:00+00"
const fmt = "hh:mm:ss Z"
const m = moment(v, fmt).diff(moment().utc(v, fmt).startOf('day'));
console.log(m/(3600*1000)); -> 6

使用时区

// Here is time zone +01.00 
const v="06:00:00+01.00"
console.log(m/(3600*1000)); -> 5
// Here is time zone -01.00 
const v="06:00:00-01.00"
console.log(m/(3600*1000)); -> 7

对于基于国家/地区的 UTC+08:45,您需要注意分母。

相关内容

最新更新