将字符串转换为日期并减去X天

时间:2016-12-11 15:05:21

标签: javascript date

我需要创建一个函数,它将一个字符串和x个(subDays)天作为参数,并将字符串转换为日期并从日期中减去x天。

输入字符串的格式为(YYYY-MM-DD),我希望能够恢复相同的格式。

我收到Invalid Date错误。

function newDate(date, subDays) {
    var myDate = new Date(date);
    myDate.setDate(myDate -subDays);
    console.log("Date: " + myDate);
}

4 个答案:

答案 0 :(得分:3)

这是你可以做到的一种方式



console.log( toYMD( subDays( '2016-12-11', 3) ) );

function subDays(date, days) {
  var dateArray = date.split('-');
  var myDate = new Date(dateArray[0], dateArray[1] - 1, dateArray[2]);
  return new Date(myDate.setDate(myDate.getDate() - days));
}
function toYMD(d) {
  return d.getFullYear() + "-" +
         padZero(d.getMonth()+1) + "-" + 
         padZero(d.getDate());
}
function padZero(v) {
  return (v < 10) ? "0" + v : v;
}
&#13;
&#13;
&#13;

答案 1 :(得分:2)

建议不要使用Date构造函数的解析器,因为它可以依赖于实现,而不是一些广泛接受的格式。所以我们自己解析字符串。

通过使用getTime获取毫秒并添加/减去毫秒来调整日期。

function newDate(date, subDays) {
  function padZero(v) {
    return (v < 10) ? "0" + v : v;
  }
  var dateArray = date.split('-').map(Number);
  var myDate = new Date(dateArray[0], dateArray[1] - 1, dateArray[2]);
  myDate = new Date(myDate.getTime() - subDays * 24 * 60 * 60 * 1000)
  return myDate.getFullYear() + '-' + padZero(myDate.getMonth() + 1) + '-' + padZero(myDate.getDate());
}
console.log(newDate('2016-12-09', 8))
console.log(newDate('2016-12-09', 9))

答案 2 :(得分:0)

首先,您必须指定您要扣除的内容;试试这个: -

function newDate(date, subDays) {
var myDate = new Date(date);

myDate.setDate(myDate.getDate() -subDays);
console.log("Date: " + myDate);
}

答案 3 :(得分:0)

有一个名为datejs的包,您可以在Date对象上轻松使用addDays(),addHours(),addMinutes()。以下是API文档:https://code.google.com/archive/p/datejs/wikis/APIDocumentation.wiki

  function newDate(date, subDays) {
    const d = Date.parse(date).addDays(-parseInt(subDays));
    return `${d.getFullYear()}-${d.getMonth()}-${d.getDay()}`;
  }