使用Moment JS解析序数时的令人困惑的行为。错误?

时间:2013-04-21 19:44:22

标签: javascript momentjs

我只是想从moment转到string,然后回到moment

但它并没有真正起作用:

f = 'dddd MMMM Do, YYYY'
s = 'Friday May 3rd, 2013'


d = moment().format(f)            # Sunday April 21st, 2013 
moment(d, f).format(f)            # Monday April 1st, 2013

moment(s, f)                      # Friday May 3rd, 2013
    .format(f)                    # Wednesday May 1st, 2013

它始终将序数解析为该月的第一天。

我的格式有问题吗?或者我期待format()如何工作?

1 个答案:

答案 0 :(得分:2)

此问题暂时提出here

解决方案是在解析时忽略序数日期的字母部分,使用DD代替Do

var f1 = 'dddd MMMM Do, YYYY';
var f2 = 'dddd MMMM DD, YYYY';

var a = moment().format(f1);
console.log(a);                    // Thursday June 20th, 2013

var b = moment(a, f1).format(f1);
console.log(b);                    // Saturday June 1st, 2013

var c = moment(a, f2).format(f1);
console.log(c);                    // Thursday June 20th, 2013

正如您所看到的,b的结果是本月的第一天,因为它不知道如何处理日期编号。但是c选择了20,忽略了额外的th个字符,从而产生了正确的结果。