You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的Luxon代码出现“Invalid DateTime”?如何修复?

问题分析与修复方案

为啥会出现这个问题?

你踩了一个Luxon入门常见的小坑:DateTime.fromISO() 这个方法是专门用来解析ISO 8601格式的字符串的,但你却传了一个原生的JavaScript Date 对象进去。当你把Date对象传给fromISO时,Luxon会自动调用该对象的toString()方法,而Date.toString()返回的格式(比如"Wed Jan 24 2018 12:29:57 GMT+0800 (中国标准时间)")根本不是标准的ISO格式,Luxon解析失败后就生成了一个标记为invalid: "unparsable"的无效DateTime实例,这时候调用toFormat()自然就返回"Invalid DateTime"了。

怎么修复?

根据你的场景,有几种简单靠谱的解决方式:

  • 用专门的fromJSDate方法(最推荐)
    Luxon早就想到了要和原生Date对象互转,专门提供了DateTime.fromJSDate()方法,直接把你的Date对象传进去就行:

    const dt = DateTime.fromJSDate(new Date(date));
    dt.toFormat('yyyy/mm/dd'); // 这下就能正常返回格式化后的日期了
    
  • 如果date本身是ISO字符串,直接传
    要是你的date变量本来就是一个ISO格式的字符串(比如"2018-01-24T12:29:57.386Z"),那完全没必要多此一举转成Date对象,直接传给fromISO就行:

    const dt = DateTime.fromISO(date);
    dt.toFormat('yyyy/mm/dd');
    
  • 如果是时间戳,用fromMillis
    要是date是毫秒级的时间戳(数字类型),那就用DateTime.fromMillis()来创建实例:

    const dt = DateTime.fromMillis(date);
    dt.toFormat('yyyy/mm/dd');
    

调试小技巧

排查问题时可以用dt.isValid属性快速判断实例是否有效,能帮你快速定位问题:

console.log(dt.isValid); // 无效实例返回false,有效则返回true

内容的提问来源于stack exchange,提问作者alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:13:27