【问题标题】:Formatting dates with moment.js based on locale根据语言环境使用 moment.js 格式化日期
【发布时间】:2014-08-12 12:51:26
【问题描述】:

我正在使用 moment-with-locales.min.js 进行日期操作,我需要在用户离开文本框时进行格式化。因为语言环境是一个问题,所以我正在尝试使用 moment 进行格式化。但是,我遇到了一个问题,我不确定我做错了还是什么。

如果用户输入“2/2/12”之类的内容,而我尝试执行 moment('2/2/12', 'l'),则使用 'l'基于语言环境的短日期,它将其格式化为“2/2/0012”。这本身似乎被打破了。

如果我尝试使用 moment('2/2/12', 'M/d/yyyy') 进行格式化,如下面的 JSFiddle 所示,它会将其更改为 '2/1 /2014'。它总是将其降低到该月的第一天,并使其成为当前年份。

这是我使用的JSFiddle

moment.locale('en-US');

var parsed = moment('2/2/12', 'M/d/yyyy');
if (moment(parsed).isValid()) {
    var d = new moment(parsed, 'l');
    alert('Pass: ' + d.format('l'));
} else {
    alert('Fail: ' + parsed);
}

我将不胜感激并提供帮助。

【问题讨论】:

  • 为什么不自己解析呢?它需要 2 行代码,可能需要 4 行验证。

标签: javascript momentjs date-parsing


【解决方案1】:

您应该使用"D""d"星期几)。

至于年份,根据docs,“两位数年份解析器默认假定 68 岁以上的年份在 1900 年代,低于 2000 年代。”所以我猜(实验似乎证实了这一点)如果您使用 4 位数格式 ("YYYY"),它将假定您在 12 年而不是 2012 年通过。如果您使用"YY",它将正确打印 2012。

因此,总而言之,"M/D/YY" 格式应该可以满足您的需求。

【讨论】:

  • 虽然提出了一些其他问题,但这引导我朝着正确的方向前进,感谢您的回复。
猜你喜欢
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
  • 2012-09-24
  • 2018-09-05
  • 2017-08-08
相关资源
最近更新 更多