问题从日期删除1个月-获取月份0

时间:2019-01-17 15:28:11

标签: javascript date

我有此代码,可以正常工作。它以特定格式为我提供了今天的日期。

function fetchTime() {
  var today = new Date();
  var dd = today.getDate();
  var mm = today.getMonth() + 1;
  var yyyy = today.getFullYear();
  if (dd < 10) {
    dd = '0' + dd;
  }
  if (mm < 10) {
    mm = '0' + mm;
  }
  var today = yyyy + '-' + mm + '-' + dd;
  return (today);
}

我还试图将今天的日期减去1个月。我以为这很简单,我刚刚删除了+1。所以我有这段代码:

function fetchTime() {
  var today = new Date();
  var dd = today.getDate();
  var mm = today.getMonth();
  var yyyy = today.getFullYear();
  if (dd < 10) {
    dd = '0' + dd;
  }
  if (mm < 10) {
    mm = '0' + mm;
  }
  var today = yyyy + '-' + mm + '-' + dd;
  return (today);
}

这给我输出2019-00-17应该是2018-12-17

有人可以告诉我正确的方法吗?我的问题是特定于以必需的格式显示日期,而我所看到的大多数示例都没有将正确的格式作为日期更改的一部分输出。

5 个答案:

答案 0 :(得分:0)

要在moment.js中减去:

moment()。subtract(1,'months')。format(“ DD-MM-YYYY”)

文档: http://momentjs.com/docs/#/manipulating/subtract/

答案 1 :(得分:0)

您应该通过获取当前月份来减去月份,然后减去所需的月份数,然后像这样更新日期变量。

List<String>

答案 2 :(得分:0)

使用相同的代码,但删除一个月。示例:

function fetchTime() {
  var today = new Date();
  today.setMonth(today.getMonth() - 1);
  var dd = today.getDate();
  var mm = today.getMonth() + 1;
  var yyyy = today.getFullYear();
  if (dd < 10) {
    dd = '0' + dd;
  }
  if (mm < 10) {
    mm = '0' + mm;
  }
  var today = yyyy + '-' + mm + '-' + dd;
  return (today);
}

答案 3 :(得分:0)

我将格式与获取分开。您可以使现有的格式设置函数采用默认为今天的可选参数,因此可以像今天一样使用它。

 function formatTime(date) {
  var dateToFormat = date || new Date();
  var dd = dateToFormat.getDate();
  var mm = dateToFormat.getMonth() + 1;
  var yyyy = dateToFormat.getFullYear();
  if (dd < 10) {
    dd = '0' + dd;
  }
  if (mm < 10) {
    mm = '0' + mm;
  }

  return (yyyy + '-' + mm + '-' + dd);
}

然后,您也可以用今天的日期减去一个月或任何其他日期的日期来调用它

    formatTime(); //will default to today
    var today = new Date();
    formatTime(addMonths(today,-1)); //format last month's date

RobG在评论中指出,您需要像Adding months to a Date in JavaScript那样实现addMonths函数

function addMonths(date, months) {
  var d = date.getDate();
  date.setMonth(date.getMonth() + +months);
  if (date.getDate() != d) {
    date.setDate(0);
  }
  return date;
}

答案 4 :(得分:0)

由于您希望使用的格式是ISO 8601日期,因此可以使用JavaScript的.toISOString。不过,您只关心前10个字符(而不是时间),因此您要添加.substring(0,10)

Date.prototype.toISODateString = function() { return this.toISOString().substring(0,10); }
Date.prototype.addMonths = function(val) { this.setMonth(this.getMonth()+val); return this;}

var date = new Date();
var todayFormatted = date.toISODateString();
console.log(todayFormatted);

var lastMonthFormatted = date.addMonths(-1).toISODateString();
console.log(lastMonthFormatted);            

我已经将格式化步骤设为一个名为toISODateString()的函数,并将其添加到了Date原型中,这是一种奇特的说法,即“您可以将.toISODateString()链接到任何{{ 1}}”。

要将日期设置为一个月,我使用了Date。我还把它变成了一个名为.setMonth()的函数。