我使用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
这个日期是完全错误的,为什么会这样,我怎么了?我想提取日,月和年
答案 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标准格式,因此会自动检测并支持它。你应该简单地省略那个参数。
... Moment.js会检测您是否正在使用ISO-8601字符串并在没有格式字符串的情况下正确解析。