moment.js中的时间(小时,分钟)格式本地化

时间:2019-04-16 20:15:30

标签: javascript momentjs

momentjs可以考虑不同语言环境的日期格式,是否可以本地化时间(小时:分钟)格式?

根据oracle docs时间格式,跨地区存在一些时间格式差异 https://docs.oracle.com/cd/E19455-01/806-0169/overview-6/index.html

moment()。locale(somelocale).format('L')这将输出格式化的日期

但是

moment()。locale(somelocale).format('LT')似乎不具备相同的功能?

class TimeFormatter extends React.Component {
  render() {
    const browserLocale = window.navigator.userLanguage || window.navigator.language;
    return (
      <div>
        {moment(this.props.value, 'HH:mm').locale(browserLocale).format('LT')}
      </div>);
  }
}

上面是我的代码,用于在react数据网格上格式化时间单元,但是当我更改chrome设置时,格式保持不变。

因此,如果我想实现时间格式本地化,可以使用momentjs,还是必须提出设置特定用户区域时间格式的if if条件?

非常感谢

1 个答案:

答案 0 :(得分:1)

LT格式确实考虑了语言环境。

以下是一些示例:

moment().locale('en-CA').format('LT') //=> "1:21 PM"
moment().locale('fr-CA').format('LT') //=> "13:21"
moment().locale('fi-FI').format('LT') //=> "13.21"
moment().locale('de-DE').format('LT') //=> "13:21"
moment().locale('no-NO').format('LT') //=> "1:21 PM"
moment().locale('th-TH').format('LT') //=> "13:21"
moment().locale('en-GB').format('LT') //=> "13:21"

请注意,您链接到的Oracle页面是Solaris 8文档的一部分-Solaris操作系统于2000年2月发布,到2012年3月寿终正寝。关于它们中使用的时间格式,这是非常错误的国家和语言。您不应将其用作参考。

还请注意,在假定“加拿大”足以完全识别语言环境的情况下,这是一个严重错误。如上所示,讲法语的加拿大人使用24小时制,但是许多讲英语的加拿大人有时使用12小时制(请参见Time notation in Canada),因此en-CA给出了12小时制,而{{ 1}}给出24小时制。

因此,仅凭国家/地区还不够。语言环境必须至少由语言组成,但是通常语言和国家/地区都是必需的。这些现在称为"IETF language tags",并由BCP 47进行了标准化。

至于为什么Moment的德语本地化结果中不包含字符串fr-CA,那是首先与#1601添加,然后又与#2006删除的原因-两者早在2014年。看到这些问题进行推理。

还请注意,Moment的本地化字符串来自社区提交的反馈和重要贡献者。在许多情况下,它们与Unicode CLDR整理的标准保持一致,但在某些情况下,它们是不同的。如果您正在寻找具有标准化本地化支持的现代日期库,请考虑Luxon,它利用了现代浏览器中内置的国际化API。