【发布时间】:2009-03-03 08:39:10
【问题描述】:
请任何人分享代码以在 JavaScript 中从当前日期查找上个月的第一个日期。例如,如果当前日期是 2009 年 1 月 25 日,我应该得到 2008 年 12 月 1 日作为结果。
【问题讨论】:
标签: javascript
请任何人分享代码以在 JavaScript 中从当前日期查找上个月的第一个日期。例如,如果当前日期是 2009 年 1 月 25 日,我应该得到 2008 年 12 月 1 日作为结果。
【问题讨论】:
标签: javascript
很简单,用date methods:
var x = new Date();
x.setDate(1);
x.setMonth(x.getMonth()-1);
【讨论】:
最简单的方法是:
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
【讨论】:
x.setDate(0) 将日期设置为最后几个月的最后一天,并且由于日期现在引用上个月,当你这样做时@ 987654323@ 它会为您提供该月的第一天。相当不错的解决方案。
处理从一月到十二月的更新年份
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>
【讨论】:
这对我有用
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' }));
【讨论】:
重要提示:这里使用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's 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] ,然后得到 destructured .
setMonth()是错误的:date = new Date("Dec 31, 2019")
date.setMonth(date.getMonth() - 1);
date; // Dec 1, 2019!
【讨论】:
查看此链接:
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));
});
【讨论】:
要获取上个月的上午 00:00:00,请使用以下命令:
let d = new Date();
d.setDate(1);
d.setMonth(d.getMonth() - 1);
d.setHours(0,0,0,0);
const lastMonthStart = new Date(d);
希望这会有所帮助!
【讨论】:
// Previous Month Detail
let prevStartDate = new Date(this.date.getFullYear(), this.date.getMonth() - 1, 1);
console.log(prevStartDate);
let preEndDate = new Date(this.date.getFullYear(), this.date.getMonth() - 1 + 1, 0);
console.log(preEndDate);
//Current Month Detail
let cStartDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1);
console.log(cStartDate);
let cEndDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0);
console.log(cEndDate);
//Next Month Detail
let nStartDate = new Date(this.date.getFullYear(), this.date.getMonth() + 1, 1);
console.log(nStartDate);
let nendDate = new Date(this.date.getFullYear(), this.date.getMonth() + 1 + 1, 0);
console.log(nendDate);
【讨论】:
//试试这个就好了
let date = new Date();
let month = new Date().getMonth();
let prevMonth = date.setMonth(month - 1)
let formatPrevMonth = new Date(date.setMonth(month - 1));
console.log(formatPrevMonth)
【讨论】: