【问题标题】:Moment.js : Format date according browser langMoment.js:根据浏览器语言格式化日期
【发布时间】:2016-04-01 11:38:46
【问题描述】:

我使用此代码以法语格式显示日期:

var dateToDisplay = moment(myDateInMS, "x").format("DD/MM/YYYY - hh:mm:ss"); // Output : "20/03/2016 - 12:35:32"

我想改进此显示以根据浏览器语言获得更好的显示。我怎么能用时刻做到这一点?

【问题讨论】:

标签: javascript momentjs


【解决方案1】:

我不建议根据浏览器语言设置区域设置,因为这不是用户实际区域设置的明确信号。例如。即使他/她说法语,用户也可以使用英语操作系统。

话虽如此。从浏览器读取语言并将 Moment.js 设置为相应的语言环境可以这样完成:

var localeData = moment.localeData();

switch (navigator.language || navigator.userLanguage) {
    case 'fr':
        localeData = moment.localeData('fr');
        break;
}

localeData.longDateFormat('LL'); // the example 'LL' will output date in "D MMMM YYYY format"

请注意,这是设置整个 Moment.js 实例的语言环境(这可能是您想要做的)。另请注意,从 Moment.js 2.8.0 开始,更改全局区域设置不会影响现有实例。

另见

【讨论】:

  • 有了这个解决方案,我不需要指定格式?我只需要调用 format()?
  • localeDate.longDateFormat 用你的例子返回一个对象
【解决方案2】:

Moment 实际上会搜索从浏览器中提取的语言环境的子字符串,以尝试选择正确的语言环境。因此,无需预先解析或创建 case 语句。 例如,moment 将es 作为语言环境,但没有es-mx。如果浏览器设置为es-mx,则语言环境函数会查找es-mx,如果找不到,则回退到es。因此:

moment.locale('es-mx');
"es"

意味着您可以这样做:

moment.locale(navigator.userLanguage || navigator.language);

然后在格式化日期时,使用一种特定于语言环境的格式以使其适合用户:

moment().format('LL')
"1 de abril de 2016"
moment().format('L')
"01/04/2016"

有关所有本地化格式及其应生成的内容,请参阅格式文档的本地化格式部分:http://momentjs.com/docs/#/displaying/format/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多