时间(小时、分钟)格式本地化在瞬间.js



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

根据 oracle 文档的时间格式,不同地区之间存在一些时间格式差异 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>);
}
}

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

因此,如果我想实现时间格式本地化,我可以使用 momentjs 吗,或者我必须提出一个 if else 条件来设置特定的用户区域时间格式

非常感谢

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 文档的一部分,该操作系统于 2000 年 2 月发布,并于 2012 年 3 月结束生命周期。 在这些国家和语言中使用的时间格式方面,这是严重错误的。 您不应将其用作参考。

另请注意,它犯了一个严重的错误,即假设"加拿大人"足以完全识别区域设置。 如上所示,讲法语的加拿大人使用 24 小时制,但许多讲英语的加拿大人有时使用 12 小时制(请参阅加拿大的时间表示法),因此en-CA给出 12 小时制,而fr-CA给出 24 小时制。

因此,仅有国家是不够的。 区域设置必须至少包含语言,但通常语言和国家/地区都是必需的。 这些现在称为"IETF 语言标签",并由 BCP 47 标准化。

至于为什么 Moment 的德语本地化不包括结果中的字符串Uhr,这是最初在 #1601 中添加的东西,但后来在 #2006 中删除 - 两者都在 2014 年。 请参阅这些问题以进行推理。

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

最新更新