[英]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
。
看起来像moment
和dayjs
这样的流行日期库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.