【问题标题】:Moment.js handles german Dezember and Januar differentMoment.js 处理德语 Dezember 和 Januar 不同
【发布时间】:2019-01-30 19:22:31
【问题描述】:

我想知道为什么 moment.js 处理一些月份的不同。例如德语: Mai、März、Oktober、Dezember 不能转换为 toDate()。每隔一个月工作一次。我认为因为这四个月不以与英语相同的前 3 个字母开头。德语 Jan/uar 与英语 Jan/uary 相同。所以这行得通。

我已将我的全局语言设置为德语,所以我不知道为什么会发生这种情况。

这是一个fiddle 用于测试。和代码:

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

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

【问题讨论】:

  • 在小提琴中,两者都失败了。此外,在小提琴中,您只链接到一个不包含任何翻译的 moment.js 文件。请提供真实的minimal reproducible example。另请说明您如何设置 momentjs 语言
  • 另外,您在小提琴中使用了一个过时版本的 moment.js (2.2.1)。为什么?
  • 小提琴只是来自不同小提琴的叉子。我没有检查那里的版本。在我的 React 应用中,我使用的是最新的。

标签: javascript reactjs momentjs


【解决方案1】:

这是一个按预期工作的版本:(Fiddle 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 日期时间格式,然后再返回 new Date(string) 如果 a未找到已知格式。 (https://momentjs.com/docs/#/parsing/string/)

要解决此问题,请指定format(在本例中为“LL”)作为第二个参数来指定字符串使用的格式。

【讨论】:

  • 感谢现在才发现。和一个非常神的解释。
猜你喜欢
  • 2021-05-18
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多