如何将日期转换为ISO格式,但使用时区信息代替';Z';用Javascript?
我一直使用以“Z”结尾的ISO格式的日期。但是现在我必须用时区信息来代替“Z”,比如如何将日期转换为ISO格式,但使用时区信息代替';Z';用Javascript?,javascript,Javascript,我一直使用以“Z”结尾的ISO格式的日期。但是现在我必须用时区信息来代替“Z”,比如+08:00 换句话说,目前我有这种格式2020-01-17T00:30:00.000Z,但现在我需要这种格式2020-01-17T08:30:00+08:00 看起来像是流行的日期库,比如moment和dayjs将日期转换为ISO格式,默认情况下也不使用“Z”。这是否仍被视为“ISO”日期格式?我不知道如何使用香草Javascript,而执行.toISOString()总是给我一个'Z'。解析器.isopars
+08:00
换句话说,目前我有这种格式2020-01-17T00:30:00.000Z
,但现在我需要这种格式2020-01-17T08:30:00+08:00
看起来像是流行的日期库,比如moment
和dayjs
将日期转换为ISO格式,默认情况下也不使用“Z”。这是否仍被视为“ISO”日期格式?我不知道如何使用香草Javascript,而执行.toISOString()
总是给我一个'Z'。解析器.isoparse('2019-08-28T14:34:25.518993Z'))
使用此选项可获得正确格式的parser.isoparse('2019-08-28T14:34:25.518993Z')
使用此选项可获得正确的格式末端的Z(“Zulu”)表示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
的工具,末端的Z(“Zulu”)表示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格式的日期字符串,但希望获取特定时区的字符串,以及时区
这里有一个简单的函数,它就是这样做的
函数getISODateStampWithTZ(日期,tzHours)
{
let dateTz=新日期(日期);
dateTz.setUTCHours(tzHours);
return dateTz.toISOString().replace(/Z$/,,
(tzHours如果您获取ISO格式的日期字符串,但希望获取特定时区中的字符串,以及时区 这里有一个简单的函数,它就是这样做的 函数getISODateStampWithTZ(日期,tzHours) { let dateTz=新日期(日期); dateTz.setUTCHours(tzHours); return dateTz.toISOString().replace(/Z$/,,
(tZhours你从哪里得到偏移量?你是指
+08:00
?是的,这部分。很抱歉,这是重复的。请看这个@kyw,这实际上不是2013年的重复。似乎是toISOString()当时还不在标准中,而这一个需要的不仅仅是祖鲁时间。你从哪里得到偏移量?你是说+08:00
?是的,这部分。很抱歉,这是重复的。看这个@kyw这不是2013年的重复。似乎是toISOString()当时还不在标准中,而这一个想要的不仅仅是祖鲁时间。