【问题标题】:moment js sometimes has moment.monthsShort() with period (dot) in german localemoment js 有时在德语语言环境中有带有句点(点)的 moment.monthsShort()
【发布时间】:2017-02-15 07:31:06
【问题描述】:

我编写了一个 JIRA 插件,它使用 moment js 来格式化和解析日期。 在某些安装中,当 moment.js 的短名称带有尾随句点时,我会遇到奇怪的行为。

moment.js 从哪里获取短名称?如何实现始终获得相同的短名称?

目前,像 3/Okt/16 这样的日期在我的 Ubuntu 实例上解析失败,但在 Mac 上有效。 3/Okt./16 似乎对两者都有效。

由于该字段是通过 Java SimpleDateFormat 填充的,因此我没有机会更改传入的格式。

从同一浏览器调用的示例:

JIRA Server hosted on MacOS:
moment.monthsShort()
["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"]

JIRA Server hosted on Ubuntu:
moment.monthsShort()
["Jan.", "Febr.", "Mrz.", "Apr.", "Mai", "Jun.", "Jul.", "Aug.", "Sept.", "Okt.", "Nov.", "Dez."]

【问题讨论】:

  • 我很肯定你有两个不同版本的时刻加载 - 我们在 .在 2.13 IIRC 中解析。也就是说,我可以看看你的解析代码吗?我想知道你是如何解析的。您是否收到控制台警告说时刻构造回退到 js 日期?
  • 没错,我检查了版本,失败的是2.13.0,工作的是2.6.0。就我而言,该版本来自 jira 本身,我无法控制将使用哪个版本。解析是这样完成的:moment('3/Okt/16','D/MMM/YY');,没有你说的控制台输出。
  • 我认为 unicode 约定将成为规范短名称的主要来源。它们都没有尾随句点。但可能是我对那个话题不够深入:unicode.org/reports/tr35/…
  • 是的,我们希望!不幸的是,我们还没有。我想我也许可以给你写一些代码来解决这个问题。

标签: javascript momentjs simpledateformat jira-plugin


【解决方案1】:

基本上,我认为最好的办法是编写一些代码来检查 moment 是否为 2.13 或更高版本,如果是,则用旧的语言环境数据覆盖。以下代码应该可以解决问题:

if(moment.version.split('.')[1] > 12) 
{ 
    moment.updateLocale('de',{
    monthsShort:'Jan_Febr_Mrz_Apr_Mai_Jun_Jul_Aug_Sept_Okt_Nov_Dez'.split('_')

    });
}
moment('3/Okt/16','D/MMM/YY').format() //"2016-10-03T00:00:00-07:00"

【讨论】:

  • 谢谢你,Maggie,非常乐意帮助你解决这个想法,不幸的是,我们推出了一个国际应用程序,我无法为所有语言维护它。
  • 我想我会使用日期的长表示将其交给 JS。那么moment.js所做的表示将不会影响我们的产品。
猜你喜欢
  • 2015-03-19
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 2018-03-07
相关资源
最近更新 更多