Luxon 无效日期

3

我正在使用 Luxon 3.3.0 尝试解析这个日期。

const dateStr = '09-MAY-23 01.53.41.500211 PM';

const dateTime = DateTime.fromFormat(dateStr, 'dd-MMM-yy hh.mm.ss.SSSSSS a');

console.log(dateTime );

但我得到了一个无效的日期。 有什么想法为什么会发生这种情况吗?

这是 jsfiddle。 https://jsfiddle.net/bnv7uw3t/2/


2
SSSSSS 不是支持的指定符号,Luxon 支持微秒吗? - orhtej2
@orhtej2 看起来它支持带填充的毫秒。https://moment.github.io/luxon/#/parsing?id=table-of-tokens - Jason Foglia
2
是的,这是3位数字(毫秒),而不是6位数字(微秒)。该表格显示了格式说明符的完整列表,“SSSSSS”不在其中。 - orhtej2
@orhtej2 我猜“padding”的措辞应该改变一下,你觉得呢?或者至少指出在这种情况下padding的限制。 - Jason Foglia
@orhtej2,您能否将其作为答案提供?我已经成功地从日期中删除了微秒并删除了额外的SSS,现在它可以正常工作了。 - Jason Foglia
1
我不确定文档需要更新,“SSS | 毫秒,填充为3” 对我来说似乎很明显,尽管我知道过去曾经读过类似的东西并且误解了它们。当你双重检查你的假设时,通常会变得明显。 - phuzi
1个回答

2

你的代码存在问题,SSSSSS 不是一个有效的格式说明符。

仔细检查源代码发现,虽然DateTime对象只支持毫秒级别,但可以使用u说明符解析输入,与文档相反,它接受多达9个数字(丢弃第一个3之后的部分)。

const dateStr = '09-MAY-23 01.53.41.503211 PM';
const dateTime = DateTime.fromFormat(dateStr, 'dd-MMM-yy hh.mm.ss.u a');
console.log(dateTime);
(...snip...)
 c: {
    day: 9,
    hour: 13,
    millisecond: 503,
    minute: 53,
    month: 5,
    second: 41,
    year: 2023
  },
(...snip...)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接