如何将指定字符串转换为Typescript中的Luxon DateTime对象?
正确转换ISO格式字符串为Luxon DateTime对象的方法
你的代码解析失败的核心原因是:DateTime.fromFormat要求输入字符串和指定格式完全匹配,但你传入的是带时间、毫秒和时区偏移的完整ISO 8601字符串,和yyyy-MM-dd格式不匹配,导致解析报错。
以下是两种正确的解决方案:
方案1:使用专门的ISO解析方法(推荐)
对于标准ISO 8601格式的字符串,直接用DateTime.fromISO即可,无需手动指定格式,Luxon会自动识别解析:
import { DateTime } from 'luxon'; const x = '2023-10-27T01:00:57.830+00:00' const y = DateTime.fromISO(x); console.log('y = ', y.toString()); // 输出示例:"2023-10-27T01:00:57.830Z"
方案2:按需处理(仅保留日期部分或严格匹配格式)
情况A:只需要提取日期部分(忽略时间和时区)
如果你的目标是获取该字符串对应的日期(时间部分归零),可以先完整解析再重置时间:
// 保留原时区的日期起始时刻 const y = DateTime.fromISO(x).startOf('day'); // 或者转换为UTC时区的日期起始时刻 const yUtc = DateTime.fromISO(x).toUTC().startOf('day');
情况B:坚持使用fromFormat(需严格匹配格式)
如果你一定要用fromFormat,必须指定和输入字符串完全一致的格式模板:
const y = DateTime.fromFormat(x, "yyyy-MM-dd'T'HH:mm:ss.SSSZZ"); // 格式说明: // yyyy-MM-dd:日期部分 // 'T':字面量分隔符T // HH:mm:ss.SSS:时:分:秒.毫秒 // ZZ:时区偏移(如+00:00)
内容的提问来源于stack exchange,提问作者Saqib Ali
相关产品推荐
相关产品推荐

