Пожалуйста, разделите код, чтобы найти предыдущую дату месяца с текущей даты в JavaScript. Например, если текущая дата - 25 января 2009 года, я должен получить результат 1 декабря 2008 года.
Получение предыдущего месяца с текущей даты в JavaScript
Ответ 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
Ответ 3
Проверьте эту ссылку:
http://blog.dansnetwork.com/2008/09/18/javascript-date-object-adding-and-subtracting-months/
ИЗМЕНИТЬ: Я применил пример:
Date.prototype.SubtractMonth = function(numberOfMonths) {
var d = this;
d.setMonth(d.getMonth() - numberOfMonths);
d.setDate(1);
return d;
}
$(document).ready(function() {
var d = new Date();
alert(d.SubtractMonth(1));
});
Эндрю
Ответ 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!