如何在Javascript中获得ISO格式的本地时间?



我想将时间以毫秒为单位转换为ISO格式的本地时间。

let time = 1668268800000
console.log(new Date(time).toISOString())

但是这不会以我的本地时间输出我的ISO日期。

根据定义,ISO是UTC。考虑使用JS的国际化库来获取本地格式的日期。

您也可以自己进行转换:

let time = 1668268800000
let utcDate = new Date(time)
localTime = time - utcDate.getTimezoneOffset() * 60 * 1000
localDate = new Date(localTime)
localIso = localDate.toISOString()
console.log(utcDate.toISOString(), localIso)

正确。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString

时区始终为零UTC偏移量,用后缀z表示。

您可以使用Date函数创建ISO时间字符串:Date.getFullYear(),Date.getMonth(),Date.getDate()等。

一旦我们有了这些值,我们就可以组合起来创建所需的ISO字符串,并以[+-]HH:MM的格式添加UTC偏移量。

此日期将使用客户端的本地时区进行格式化。

function formatUTCOffset(minutes) {
return (minutes >= 0 ? '+': '-') + (Math.floor(Math.abs(minutes) / 60) + '').padStart(2, '0') + ':' + (Math.abs(minutes) % 60  + '').padStart(2, '0');
}
function formatDateElements(separator, ...elements) {
return elements.map(x => (x + '').padStart(2, '0')).join(separator);
}
function formatLocalISO(date) {
let isoDate = formatDateElements('-', date.getFullYear(), date.getMonth() + 1, date.getDate());
isoDate += 'T' + formatDateElements(':', date.getHours(), date.getMinutes(), date.getSeconds());
return isoDate + formatUTCOffset(-date.getTimezoneOffset());
}
let time = 1668268800000
console.log('ISO (1668268800000):', formatLocalISO(new Date(time)))
console.log('ISO (now):          ', formatLocalISO(new Date()))
.as-console-wrapper { max-height: 100% !important; }

最新更新