Kee*_*ser 133 javascript date
我试图在当前日期之前3个月形成一个日期.我通过以下代码获得当前月份
var currentDate = new Date();
var currentMonth = currentDate.getMonth()+1;
Run Code Online (Sandbox Code Playgroud)
Date考虑到月份是1月(1),日期前3个月将是OCtober(10),你们能为我提供计算和形成日期(数据类型的对象)的逻辑吗?
gil*_*ly3 289
var d = new Date();
d.setMonth(d.getMonth() - 3);
Run Code Online (Sandbox Code Playgroud)
这适用于一月.运行此代码段:
var d = new Date("January 14, 2012");
console.log(d.toLocaleDateString());
d.setMonth(d.getMonth() - 3);
console.log(d.toLocaleDateString());Run Code Online (Sandbox Code Playgroud)
Jan*_*sch 22
我建议使用名为Moment.js的库.
它经过了充分测试,跨浏览器和服务器端工作(我在Angular和Node项目中都使用它).它对语言环境日期有很大的支持.
var threeMonthsAgo = moment().subtract(3, 'months');
console.log(threeMonthsAgo.format()); // 2015-10-13T09:37:35+02:00
Run Code Online (Sandbox Code Playgroud)
.format()返回以ISO 8601格式格式化的日期的字符串表示形式.您也可以使用自定义日期格式,如下所示:.format('dddd, MMMM Do YYYY, h:mm:ss a')
为了使事情变得非常简单,您可以使用DateJS,一个JavaScript的日期库:
您的示例代码:
Date.today().add({ months: -1 });
Run Code Online (Sandbox Code Playgroud)
小智 8
这应该处理加法/减法,只需将一个负值放入减去,然后加一个正值.这也解决了月交叉问题.
function monthAdd(date, month) {
var temp = date;
temp = new Date(date.getFullYear(), date.getMonth(), 1);
temp.setMonth(temp.getMonth() + (month + 1));
temp.setDate(temp.getDate() - 1);
if (date.getDate() < temp.getDate()) {
temp.setDate(date.getDate());
}
return temp;
}
Run Code Online (Sandbox Code Playgroud)
做这个
let currentdate = new Date();
let last3months = new Date(currentdate.setMonth(currentdate.getMonth()-3));
Run Code Online (Sandbox Code Playgroud)
Javascript 的setMonth方法也处理年份。例如,2020-01-29如果 currentDate 设置为,上面的代码将返回new Date("2020-01-29")
我喜欢gilly3的简单回答,但用户可能会感到惊讶,3月31日之前的一个月是3月3日。我选择实现一个坚持到月底的版本,所以3月28日、29日、30日之前的一个月, 31 都是 2 月 28 日,当时不是闰年。
function addMonths(date, months) {
var result = new Date(date),
expectedMonth = ((date.getMonth() + months) % 12 + 12) % 12;
result.setMonth(result.getMonth() + months);
if (result.getMonth() !== expectedMonth) {
result.setDate(0);
}
return result;
}
var dt2004_05_31 = new Date("2004-05-31 0:00"),
dt2001_05_31 = new Date("2001-05-31 0:00"),
dt2001_03_31 = new Date("2001-03-31 0:00"),
dt2001_02_28 = new Date("2001-02-28 0:00"),
result = addMonths(dt2001_05_31, -2);
console.assert(dt2001_03_31.getTime() == result.getTime(), result.toDateString());
result = addMonths(dt2001_05_31, -3);
console.assert(dt2001_02_28.getTime() == result.getTime(), result.toDateString());
result = addMonths(dt2001_05_31, 36);
console.assert(dt2004_05_31.getTime() == result.getTime(), result.toDateString());
result = addMonths(dt2004_05_31, -38);
console.assert(dt2001_03_31.getTime() == result.getTime(), result.toDateString());
console.log('Done.');Run Code Online (Sandbox Code Playgroud)
小智 7
直接放入变量中的“一个衬里”(在多行中易于阅读):
var oneMonthAgo = new Date(
new Date().getFullYear(),
new Date().getMonth() - 1,
new Date().getDate()
);
Run Code Online (Sandbox Code Playgroud)
如果setMonthgilly3 提供的方法不是您要找的方法,请考虑:
var someDate = new Date(); // add arguments as needed
someDate.setTime(someDate.getTime() - 3*28*24*60*60);
// assumes the definition of "one month" to be "four weeks".
Run Code Online (Sandbox Code Playgroud)
可以使用任何时间,只需设置正确的倍数。
小智 6
对于获取今天之前三个月的日期:
let d = new Date(new Date().setMonth(new Date().getMonth() - 3))
console.log(d.toISOString().slice(0, 10))
// 2022-05-24 (today is 2022-08-24)
Run Code Online (Sandbox Code Playgroud)