好吧,我有一个时间字符串,如"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,您需要注意分母。