如何只替换接下来的两个字符
Posted
技术标签:
【中文标题】如何只替换接下来的两个字符【英文标题】:How to ONLY replace the next two characters 【发布时间】:2021-12-21 16:14:00 【问题描述】:我正在尝试将 ISO 时间重置为本地时间,但在转换时遇到了一些问题。
目前,我:
// incoming ISO date
let date = new Date('2021-11-08T20:31:23.746Z');
// 1. get timezone offset in hours
const offset = date.getTimezoneOffset() / 60;
// 2. calculate local hour
let localHour = date.toISOString().split('T')[1].substring(0, 2) - offset;
// 3. calculate local time
let localTime = date.toISOString().replace(/[T-:]/, localHour);
console.log(localTime);
// ISO Date
// 2021-11-08T20:31:23.746Z (original)
// 2021-11-08T13:23.746Z (local timezone)
在第 3 步中,我尝试仅替换“T”之后的前两个字符,但是,这不是正则表达式的正确解决方案。
【问题讨论】:
正则表达式应为T..
以匹配 T
和以下 2 个字符。
如果时差改变日期,这将不起作用。
【参考方案1】:
停在那里,不要这样做。日期管理很难。你要朝自己的脚开枪。使用库,例如 dayjs。
dayjs(date).local().toDate()
【讨论】:
【参考方案2】:Date 构造函数在解析后自动将日期转换为您的语言环境。
// incoming ISO date
let date = new Date('2021-11-08T20:31:23.746Z');
const res = date.toLocaleString().replaceAll('/', '-').split(', ').join('T')
console.log(res)
// ISO Date
// 2021-11-08T20:31:23.746Z (original)
// 2021-11-08T13:23.746Z (local timezone)
【讨论】:
当我运行它时,它给了我“2021 年 11 月 8 日星期一 13:31:23 GMT-0700(山地标准时间)”。如何将其转换回 ISO,但使用当地时间? @TylerMorales 我已经更新了我的答案。它现在应该可以工作了。以上是关于如何只替换接下来的两个字符的主要内容,如果未能解决你的问题,请参考以下文章