用时刻js修复溢出

时间:2016-09-14 09:58:55

标签: javascript date momentjs

我想得到" 2016-10-01"当我使用moment("2016-09-31")时。 但是,当我尝试时,我收到INVALIDA DATE消息。

有可能吗?

2 个答案:

答案 0 :(得分:1)

Javascript Date对象会自动执行此操作。

日期对象



var str = "2016-09-31";
var d = new Date(str);
console.log(d.toDateString())




<强>逻辑:

  • 创建任何指定月份的第一天。
  • 从字符串中提取日期并从中减去1。
  • 使用.add(date, 'day')
  • 将日期值添加到时刻变量

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:1)

根据ECMA-262,在解析ISO 8601格式的日期字符串时,如果任何部分超出范围,则结果必须是无效的日期。在我看来,moment.js符合标准。

如果要从无效部分创建日期,则应手动执行。

&#13;
&#13;
/* 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;
&#13;
&#13;