我想得到" 2016-10-01"当我使用moment("2016-09-31")
时。
但是,当我尝试时,我收到INVALIDA DATE
消息。
有可能吗?
答案 0 :(得分:1)
Javascript Date
对象会自动执行此操作。
var str = "2016-09-31";
var d = new Date(str);
console.log(d.toDateString())

<强>逻辑:强>
.add(date, 'day')
var str = "2016-09-31";
var arr = str.split(/(?:-|\/)/);
var d = moment(arr[0] + "-" + arr[1]+"-1").add(+arr[2]-1, "day").format("DD-MM-YYYY");
console.log(d)
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.0/moment.js"></script>
&#13;
答案 1 :(得分:1)
根据ECMA-262,在解析ISO 8601格式的日期字符串时,如果任何部分超出范围,则结果必须是无效的日期。在我看来,moment.js符合标准。
如果要从无效部分创建日期,则应手动执行。
/* Parse a date in ISO 8601 format as local
** Allow invalid parts
** @param {string} s - string to parse
** @returns {Date}
*/
function parseInvalidDate(s) {
var b = s.split(/\D/);
return new Date(b[0], --b[1], b[2]);
}
console.log(parseInvalidDate('2016-09-31').toString())
&#13;