在我解析的JSON数据中,我有一个输出日期,如下所示:
SessionStartTime: "2022-04-14T08:30:00-07:00"
,这就是它在我的HTML中打印的方式。
我如何分离和更改这种格式,并获得时间并像这样显示它;8:30-7:00";像这样的日期";2022年4月14日";?是否可以按原样处理解析后的字符串,或者应该先将其转换为日期类型,然后更改其格式?
有几种可能的方法。
接下来提供的2个是基于拆分的,可以是一次,也可以是两次。
第一种是基于正则表达式,可以从拆分结果中检索无效的日期片段、时间和区域。从那里,可以通过区域设置字符串格式和模板文字重新组合结果字符串。
console.log(
`"2022-04-14T08:30:00-07:00".split(/([+-]*d{2}:d{2})/) ...`,
"2022-04-14T08:30:00-07:00".split(/([+-]*d{2}:d{2})/)
);
const [
dateFragment,
time,
_,
zone,
] = "2022-04-14T08:30:00-07:00".split(/([+-]*d{2}:d{2})/);
console.log({ dateFragment, time, zone });
console.log(
'end result ...',
`${ new Date(dateFragment.slice(0, -1)).toLocaleDateString('en-US') } ${ time } ${ zone }`
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
或者,不是new Date(...).toLocaleDateString('en-US')
,而是第二次拆分。。。这里是:
上的无效但切片的日期片段,以便检索年、月和日期。。。并通过模板文字组合结果字符串。
const [
dateFragment,
time,
_,
zone,
] = "2022-04-14T08:30:00+02:00".split(/([+-]*d{2}:d{2})/);
console.log({ dateFragment, time, zone });
const [
year,
month,
date,
] = dateFragment.slice(0, -1).split('-');
console.log({ year, month, date });
console.log(
'end result ...',
`${ month }/${ date }/${ year } ${ time } ${ zone }`
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
也有可能通过单个正则表达式匹配/捕获相关部分,例如…/(?<date>d{4}-d{2}-d{2})T(?<time>d{2}:d{2}):d{2}(?<zone>[+-]d{2}:?d{2})/
。
这个正则表达式使用命名捕获组,基于这种方法的解决方案可能与下一个提供的解决方案类似。。。
// see ... [https://regex101.com/r/sYzrA7/1]
const regXCaptureDataTimeAndZone =
/(?<date>d{4}-d{2}-d{2})T(?<time>d{2}:d{2}):d{2}(?<zone>[+-]d{2}:?d{2})/;
const {
date,
time,
zone,
} = regXCaptureDataTimeAndZone
.exec("2022-04-14T08:30:00-07:00")
?.groups ?? {};
console.log({ date, time, zone });
console.log(
'end result ...',
`${ new Date(date).toLocaleDateString('en-US') } ${ time } ${ zone }`
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
您可以使用字符串,但我认为只调用date.parse 会更容易
Date.parse(date).toLocaleDateString('en-US')