如何只替换接下来的两个字符

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 我已经更新了我的答案。它现在应该可以工作了。

以上是关于如何只替换接下来的两个字符的主要内容,如果未能解决你的问题,请参考以下文章

java中如何同时替换字符串中两个或者多个字符, 例如吧ABCDEF替换成A1C2EF?

notepad++如何替换两个字符之间的内容?内容跨行

如何只替换子字符串而不是整个字符串?

如何对字符串只使用一次替换()方法而不是多次?

如何以一个不会最终替换另一个字符串的方式替换两个字符串?

如何多次替换两个分隔符/字符串之间的唯一字符串