我正试图形成一个日期,这是3个月前的当前日期。我通过下面的代码得到当前月份
var currentDate = new Date();
var currentMonth = currentDate.getMonth()+1;
你能给我提供一个逻辑来计算和形成一个日期(date数据类型的对象),考虑到当月份是一月(1)时,日期前3个月将是十月(10)吗?
我正试图形成一个日期,这是3个月前的当前日期。我通过下面的代码得到当前月份
var currentDate = new Date();
var currentMonth = currentDate.getMonth()+1;
你能给我提供一个逻辑来计算和形成一个日期(date数据类型的对象),考虑到当月份是一月(1)时,日期前3个月将是十月(10)吗?
当前回答
var todayDate =新日期。slice (0) (10); var d =新日期(todayDate); d . setMonth (d . getMonth () - 3); 游戏机。log (todayDate) log (d . toISOString(游戏机)。slice (0) (10));
其他回答
var todayDate =新日期。slice (0) (10); var d =新日期(todayDate); d . setMonth (d . getMonth () - 3); 游戏机。log (todayDate) log (d . toISOString(游戏机)。slice (0) (10));
这样做
let currentdate = new Date();
let last3months = new Date(currentdate.setMonth(currentdate.getMonth()-3));
Javascript的setMonth方法也负责年份。例如,如果currentDate设置为new Date("2020-01-29"),上述代码将返回2020-01-29。
直接放入变量中的“一行代码”(多行代码,便于阅读):
var oneMonthAgo = new Date(
new Date().getFullYear(),
new Date().getMonth() - 1,
new Date().getDate()
);
为了让事情变得简单,你可以使用DateJS,一个JavaScript的日期库:
http://www.datejs.com/
示例代码:
Date.today().add({ months: -1 });
由于“2月31日”自动转换为“3月3日”或“3月2日”,作为“3月31日”的前一个月,这是相当违反直觉的,我决定按照我的想法来做。 类似于@Don Kirkby的回答,我也将日期修改为目标月份的最后一天。
function nMonthsAgo(date, n) {
// get the target year, month, date
const y = date.getFullYear() - Math.trunc(n / 12)
const m = date.getMonth() - n % 12
let d = date.getDate()
if (d > 27) { // get a valid date
const lastDateofMonth = new Date(y, m + 1, 0).getDate()
d = Math.min(d, lastDateofMonth)
}
return new Date(y, m, d)
}
d = new Date('2022-03-31')
nMonthsAgo(d, 1).toLocaleDateString()
最后,我喜欢@gilly3在他的回答中说的:
如果您的需求比这更复杂,请使用一些数学并编写一些代码。你是一个开发人员!你不需要安装一个库!你不需要从stackoverflow复制和粘贴!您可以自己开发代码来完成您所需要的工作!