【问题标题】:Adding days to locale specific dates using moment.js使用 moment.js 将天数添加到特定于语言环境的日期
【发布时间】:2014-08-11 14:58:52
【问题描述】:

我正在尝试使用 moment-with-locales.min.js 将天数添加(或减去)特定于语言环境的日期。我所拥有的是包含格式化为特定语言环境的日期的文本框。当用户更新一个时,它会重置所有其他的并添加指定的天数。但是,我似乎无法让 moment.js 根据 en-US 以外的任何内容来操纵日期,因此日期已经过时了。

我用这个jsFiddle尝试了几种变体

var d = new moment('11/08/2014').locale('en-GB'); //August 11, 2014
alert(d.locale()); //returns en-gb

d.add("days",1).format('L');
//d.add("days",1).locale('en-GB').format('L');
alert(d); //returns November 09, 2014 instead of 12/08/2014

//note, the format is incorrect as well, should be returning short format

我确定我用错了,所以欢迎任何建议。

【问题讨论】:

  • new moment('11/08/2014').locale('en-GB'); 被解析为 Sun Nov 09 2014 00:00:00 GMT+0100 (W. Europe Standard Time) 而不是 2004 年 8 月 11 日。所以它读取的是 mm/dd/yyyy 而不是 dd/mm/yyyy
  • @Halcyon 是的,但是 afaik en-GB 的日期格式为 dd/MM/YYYY,因此它应该正确解析它..
  • 是的,这也是我所期望的。也许.locale 电话来得太晚了?我对momentjs还不够熟悉。
  • 感谢两位的回复。

标签: javascript momentjs date-parsing


【解决方案1】:

基于https://github.com/moment/moment/issues/665,需要为解析器定义L token。同时,在开始解析之前定义语言环境。所以最终的代码是

moment.locale('en-gb');
var d = new moment('11/08/2014', 'L'); //August 11, 2014
alert(d.locale()); //returns en-gb

d.add("days", 1);
alert(d.format('L')); //returns 12/8/2014

http://jsfiddle.net/omnbgk5s/2

【讨论】:

  • 就是这样。感谢您的回答。
猜你喜欢
  • 2015-02-06
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
相关资源
最近更新 更多