Подтвердить что ты не робот

Получение предыдущего месяца с текущей даты в JavaScript

Пожалуйста, разделите код, чтобы найти предыдущую дату месяца с текущей даты в JavaScript. Например, если текущая дата - 25 января 2009 года, я должен получить результат 1 декабря 2008 года.

4b9b3361

Ответ 1

Достаточно просто, с методами даты:

  var x = new Date();
  x.setDate(1);
  x.setMonth(x.getMonth()-1);

Ответ 2

Самый простой способ был бы:

var x = new Date();
x.setDate(0); // 0 will result in the last day of the previous month
x.setDate(1); // 1 will result in the first day of the month

Ответ 4

С января по декабрь сдается год с обновлением

var prevMonth = function(dateObj) {
	var tempDateObj = new Date(dateObj);

	if(tempDateObj.getMonth) {
		tempDateObj.setMonth(tempDateObj.getMonth() - 1);
	} else {
		tempDateObj.setYear(tempDateObj.getYear() - 1);
		tempDateObj.setMonth(12);
	}

	return tempDateObj
};

var wrapper = document.getElementById('wrapper');

for(var i = 0; i < 12; i++) {
	var x = new Date();
  var prevDate = prevMonth(x.setMonth(i));
	var div = document.createElement('div');
  div.textContent = 
  "start month/year: " + i + "/" + x.getFullYear() +
  " --- prev month/year: " + prevDate.getMonth() +
  "/" + prevDate.getFullYear() +
  " --- locale prev date: " + prevDate.toLocaleDateString();
  wrapper.appendChild(div);
}
<div id='wrapper'>
</div>

Ответ 5

Это сработало для меня

var curDateMonth = new Date();
var prvDateMonth = new Date(curDateMonth.getFullYear(),curDateMonth.getMonth()-1,curDateMonth.getMonth());
console.log(curDateMonth.toLocaleString('en-US', { month: 'long' }) +' vs '+ prvDateMonth.toLocaleString('en-US', { month: 'long' }));

Ответ 6

Важное примечание: некоторые из ответов, использующих setMonth(), здесь неверны:

Один лайнер для использования в 2019 году (с использованием синтаксиса ES6; поддерживается всеми основными браузерами и Node):

    const date = new Date().toISOString(); // "2019-09-18T13:49:12.775Z"
    const [yyyy, mm, dd, h, i, s] = date.split(/T|:|-/);


    // previous month last day
    const prev = new Date(new Date().setDate(0)).toISOString();
    const [pyyyy, pmm] = prev.split(/T|:|-/);

Обратите внимание, что деструктуризация массива позволяет пропускать части:

    const date = new Date().toISOString();
    const [, , dd, , i] = date.split(/T|:|-/);

Объяснение: Приведенный выше код получает дату ISO 2019-09-18T13:49:12.775Z и разделяет ее на :, - или T, которая возвращает массив [2019, 09, 18, 13, 49, 12], который затем получает деструктурированный.

Использование setMonth() неправильно:

date = new Date("Dec 31, 2019")
date.setMonth(date.getMonth() - 1);
date; // Dec 1, 2019!