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条件?
非常感谢
答案 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。