繁体   English   中英

如何将日期转换为 ISO 格式但使用时区信息代替 Javascript 中的“Z”?

[英]How to convert a date to ISO format but with timezone info in place of the 'Z' in Javascript?

我一直使用以“Z”结尾的 ISO 格式的日期。 但是现在我必须用+08:00类的时区信息替换那个 'Z' 。

换句话说,目前我有这种格式2020-01-17T00:30:00.000Z ,但现在我需要这种格式2020-01-17T08:30:00+08:00

看起来像momentdayjs这样的流行日期库dayjs将日期转换为没有'Z'的ISO格式。 这仍然被认为是“ISO”日期格式吗? 而且我不知道如何使用 vanilla Javascript 并且执行.toISOString()总是给我 'Z' ..

parser.isoparse('2019-08-28T14:34:25.518993Z') 使用它来获得正确的格式

末尾的 Z(“祖鲁语”)表示 UTC,即。 UTC 的偏移量为零。 我假设您想从 UTC 转换为本地时间,在这种情况下,您需要计算与 UTC 的偏移量:

function convertUTCDateToLocalDate(date) {
    const newDate = new Date(date.getTime() + date.getTimezoneOffset() * 60 * 1000);
    const offset = date.getTimezoneOffset() / 60;
    const hours = date.getHours();

    newDate.setHours(hours - offset);

    return newDate;   
}

用法:

const date = new Date("2020-01-17T00:30:00.000Z")
const newDate = convertUTCDateToLocalDate(date)
newDate.toISOString() // "2020-01-17T01:30:00.000+01:00"

谨防! 此解决方案不适用于偏移量不是完整小时的时区。

如果您在浏览器中运行它,我强烈建议您使用像moment这样的工具。

如果您以 ISO 格式获取日期字符串,但您想获取某个时区中的字符串,并带有时区。

然后这里有一个简单的函数可以做到这一点。

 function getISODateStampWithTZ (date, tzHours) { let dateTz = new Date(date); dateTz.setUTCHours(tzHours); return dateTz.toISOString().replace(/Z$/, (tzHours<0 ? '-' : '+') + (Math.abs(tzHours)<10 ? '0'+Math.abs(tzHours) : Math.abs(tzHours)) + ':00'); } const date = new Date('2020-01-17T00:30:00.000Z'); console.log(date.toISOString()); console.log(getISODateStampWithTZ(date, 8)); console.log(getISODateStampWithTZ(date, -1));

这样的函数也可以添加到 Date 原型中。

下面的示例在函数前加上“custom”,使其与标准方法不同。

 Date.prototype.customToISOStringTZ = function (tzHours) { let dateTz = new Date(this); dateTz.setUTCHours(tzHours); return dateTz.toISOString().replace(/Z$/, (tzHours<0 ? '-' : '+') + (Math.abs(tzHours)<10 ? '0'+Math.abs(tzHours) : Math.abs(tzHours)) + ':00'); } const date = new Date('2020-01-17T00:30:00.000Z'); console.log(date.toISOString()); console.log(date.customToISOStringTZ(8)); console.log(date.customToISOStringTZ(-1));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM