Moment.js处理德语Dezember和Januar的方式不同

时间:2019-01-30 19:22:31

标签: javascript reactjs momentjs

我想知道为什么moment.js会造成月份差异。例如德语: Mai,März,Oktober和Dezember无法将其转换为Date()。每隔一个月工作一次。我认为因为这四个月的开头三个字母与英语相同。德语的Jan / uar与英语的Jan / uary相同。这样就行了。

我在全球范围内都将德语设置为德语,所以我不知道为什么会这样。

这里是fiddle进行测试。和代码:

var now = moment('7. Dezember 2016').toDate();
alert(now);

var now = moment('9. Januar 2016').toDate();
alert(now);

1 个答案:

答案 0 :(得分:3)

这是一个可以正常工作的版本:(小提琴http://jsfiddle.net/akuxjoge/

moment.locale('de');

let dt = moment("7. Dezember 2016", "LL").toDate();
alert(dt);

dt = moment("9. Januar 2016", "LL").toDate();
alert(dt);

我使用语言环境中随附的最新版的moment.js。

https://momentjs.com/downloads/moment-with-locales.min.js

您的代码存在问题

您不能仅将任何日期格式传递给moment()函数。 momentjs将仅识别某些特定格式。如果无法识别格式,它将把解析字符串作为日期/时间的任务传递给浏览器。因此,您看到的特定行为是您的浏览器尝试解析该字符串。

  

从字符串创建时刻时,我们首先检查该字符串是否与已知的ISO 8601格式匹配,然后再检查该字符串是否与RFC 2822日期时间格式匹配,然后返回到新的Date(string)的后退,如果找不到已知格式。   (https://momentjs.com/docs/#/parsing/string/

要解决此问题,请指定format(在这种情况下为“ LL”)作为第二个参数,以指定字符串使用的格式。