Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将日期转换为ISO格式,但使用时区信息代替';Z';用Javascript?_Javascript - Fatal编程技术网

如何将日期转换为ISO格式,但使用时区信息代替';Z';用Javascript?

如何将日期转换为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

我一直使用以“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'。

解析器.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()当时还不在标准中,而这一个想要的不仅仅是祖鲁时间。