如何格式化Temporal PlainDateTime?是否已支持该操作?
如何格式化Temporal PlainDateTime?
直接用Intl.DateTimeFormat格式化的问题
目前主流JS环境里,Intl.DateTimeFormat还不支持直接传入Temporal.PlainDateTime对象,你写的这段代码运行时会报错,因为format方法只认Date类型或者时间戳数值。
正确的格式化方式
转成
Date对象格式化(注意时区差异)Temporal.PlainDateTime有toDate()方法,能转成Date对象(转换时会把这个无时区时间当成本地时区的时间),之后就能用Intl.DateTimeFormat处理:const f = new Intl.DateTimeFormat("en-us", { hour: "2-digit", minute: "2-digit", }) const t = Temporal.Now.plainDateTimeISO().add({ nanoseconds: 10000000 }) const str = f.format(t.toDate())注意:
Temporal.PlainDateTime是无时区的时间表示,转Date会默认用本地时区,可能出现时间偏移,得结合业务场景确认是否合适。转成
ZonedDateTime后格式化
如果要明确时区,先把PlainDateTime转成带时区的ZonedDateTime再格式化:const f = new Intl.DateTimeFormat("en-us", { hour: "2-digit", minute: "2-digit", timeZone: "UTC" // 可指定任意有效时区 }) const t = Temporal.Now.plainDateTimeISO().add({ nanoseconds: 10000000 }) const zonedT = t.toZonedDateTimeISO("UTC") const str = f.format(zonedT)用自带的
toString方法
如果不需要本地化格式,直接调用toString()就能得到标准ISO格式的字符串:const t = Temporal.Now.plainDateTimeISO().add({ nanoseconds: 10000000 }) console.log(t.toString()) // 示例输出:"2024-05-20T12:34:56.010"
内容的提问来源于stack exchange,提问作者BAR
相关产品推荐
相关产品推荐

