【问题标题】:How to set locale for parsing in moment.js?如何在 moment.js 中设置解析的语言环境?
【发布时间】:2019-06-06 15:23:07
【问题描述】:

很遗憾,我没有在文档中找到答案,所以...

例如,我输入了日期:“09/01/2017”。我不知道,它是 DD/MM/YYYY 或 MM/DD/YYYY,但我知道用户区域设置。我可以得到类似下面的东西吗?

let date   = "09/01/2017",
    locale = "en_US",// or "en_AU"
    result = moment(date, locale).format("DD MMM YYYY");
// 01 Sep 2017
// 09 Jan 2017

或者我需要写一张地图然后设置格式吗?

let map =
    {
        en_US: 'DD/MM/YYYY',
        en_AU: 'MM/DD/YYYY',
        // ...
    },
    date   = "09/01/2017",
    locale = "en_US",// or "en_AU"
    result = moment(date, map[locale]).format("DD MMM YYYY");
// 01 Sep 2017
// 09 Jan 2017

谢谢

【问题讨论】:

  • "…但我知道用户区域设置"。用户所在的位置并不是他们可能使用的日期格式的可靠指标。
  • "en–AU" 不是语言环境,而是语言标签。它与一个人的位置(即他们的语言环境)没有任何关系。我真的无法理解这种用词不当(似乎源自 ECMA-402)是如何持续存在的,或者为什么聪明的人会传播它。
  • 在我的任务上下文中,这个标签表示数据的格式,所以可以

标签: javascript date momentjs


【解决方案1】:

您可以使用moment.localeData()longDateFormat('L') 获取特定于语言环境的令牌。

这是一个现场样本:

let date   = "09/01/2017";
let locale = "en_US";
let localeFormat =  moment.localeData(locale).longDateFormat('L');
let result = moment(date, localeFormat).format("DD MMM YYYY");
console.log(result); // 01 Sep 2017

locale = "en_AU";
localeFormat =  moment.localeData(locale).longDateFormat('L');
result = moment(date, localeFormat).format("DD MMM YYYY");
console.log(result); // 09 Jan 2017
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.min.js"></script>

【讨论】:

    【解决方案2】:

    我会使用纯JS根据本地提取月份,使用moment将月份格式化为MMM,然后加入它们。

    var locale = 'en_AU'
    
    var date = '09/01/2019'.split('/')
    
    if (locale === 'en_AU') {
        var monthFormatted = moment(date[0]).format('MMM')
        date = [date[1], monthFormatted, date[2]].join(' ')
    }
    
    else {
        var monthFormatted = moment(date[1]).format('MMM')
        date = [date[0], monthFormatted, date[2]].join(' ')
    }
    
    console.log(date)
    // 09 Jan 2019 or 01 Sep 2019
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 2014-05-29
      • 2014-01-01
      • 2019-08-27
      • 2019-08-27
      • 2011-01-24
      相关资源
      最近更新 更多