Angularjs + moments-js返回错误的日期

时间:2014-05-05 00:09:25

标签: angularjs date momentjs date-parsing

我使用angularjs,我想要将一个字符串解析为我的代码看起来像这样的日期:

var d=moment.utc("2011-10-02T22:00:00.000Z", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
            var year =d.year();
             var month =d.month();
             var day =d.day();
            $log.log("MOMENTS:"+"year: "+year+" month: "+month+" day: "+day);

日期应为" 2011年10月3日"

但在日志中是:全能:年:2014月:2天:6

这个日期是完全错误的,为什么会这样,我怎么了?我想提取日,月和年

2 个答案:

答案 0 :(得分:1)

这是一个小提琴:http://jsfiddle.net/FGa2J/

moment.day()返回您需要moment.date()的星期几(不是月中的某天)。 moment.month()基于0,因此10月份你将得到9。此外,似乎片刻可以解析你的日期字符串,而不指定格式。

来自小提琴的代码:

report ( "2011-10-02T22:00:00.000Z", ["yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"] );

var d = moment("2011-10-02T22:00:00.000Z");
var year = d.year();
var month = d.month();
var day = d.date();
console.log("MOMENTS:"+"year: "+year+" month: "+(month+1)+" day: "+day);

function report( dateString, formats) {
    $("#results").append (
        $("<li>", { text: 
        dateString + " is valid: " + moment(dateString, formats).isValid()
              })
    );
}

答案 1 :(得分:1)

您没有使用正确的string formatting characters

你有:"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"

暂时,它将是:"YYYY-MM-DDTHH:mm:ss.SSSZ"

请注意,它区分大小写,并不一定与其他语言(.Net,PHP等)的格式匹配。

然而 - 由于这是ISO-8601标准格式,因此会自动检测并支持它。你应该简单地省略那个参数。

来自the documentation

  

... Moment.js会检测您是否正在使用ISO-8601字符串并在没有格式字符串的情况下正确解析。