如何使用JavaScript从一个月的基准日获取最新日期。
我在任何地方都找不到它,所以让我在一个示例中进行解释:
今天是10月2日,因为我的基准日是5,所以我需要以某种方式检索9月5日的日期。日期应该是过去的日期,这意味着如果当前日期是10月6日,则我需要返回10月5日,如果是11月6日,则返回11月5日,如果是11月23日,则返回11月5日,依此类推。
我希望我足够清楚。
答案 0 :(得分:1)
如果给定“不可能”的日期(如-1个月),则<v-snackbar centered />
构造函数很聪明,可以滚动到前几个月。请注意,JavaScript日期中的月份从零开始,因此0是一月,11是十二月,依此类推。
Date
答案 1 :(得分:0)
希望我能正确理解
stringDate
参数是可选的,因此您可以测试10/6/20
。
${currentMonth + 1}
是因为索引的月份为0。当您将它们传递回Date构造函数时,它们将以面值9 = Sept
进行解释。
function getPastDate(stringDate) {
const currentDate = stringDate ? new Date(stringDate) : new Date();
const currentDay = currentDate.getDate();
const currentMonth = currentDate.getMonth(); // 9 for Oct Months are 0 indexed
const currentYear = currentDate.getFullYear();
const baseDay = 5;
console.log(currentDay, currentMonth, currentYear)
if (currentDay > baseDay) {
return new Date(`${currentMonth + 1}/${baseDay}/${currentYear}`);
}
return new Date(`${currentMonth}/${baseDay}/${currentYear}`);
}
答案 2 :(得分:0)
这是可以满足您要求的东西。它没有错误检查功能,因此当基数小于或大于当月或当月的天数时,它将给出时髦的结果。
let base = 5;
let date = new Date()
let today = date.getDate();
if (today >= base) {
console.log(date.toString());
} else {
let d = date.getMonth()
date.setMonth(d-1);
date.setDate(base)
console.log(date.toString());
}
答案 3 :(得分:0)
我希望我明白到底想要什么。这可能是一个解决方案:
Solution = (base, dd = 0, mm = 0) => {
let months = [
["January", 31],
["February", 29],
["March", 31],
["April", 30],
["May", 31],
["June", 30],
["July", 31],
["August", 31],
["September", 30],
["October", 31],
["November", 30],
["December", 31],
];
let d = 0;
let m = 0;
if (dd === 0 && mm === 0) {
day = new Date();
d == day.getDate();
m = day.getMonth();
} else if (validDay(dd, mm, months)) {
d = dd;
m = mm - 1;
} else {
return "invalid date";
}
if (d <= base) {
base = base >= 10 ? base : "0" + base;
return base + " " + months[m - 1][0];
} else {
base = base >= 10 ? base : "0" + base;
return base + " " + months[m][0];
}
};
validDay = (day, month, months) => {
if (month >= 1 && month <= 12) {
if (day >= 1 && day <= months[month - 1][1]) {
return true;
}
return false;
}
};
如果未设置mm和dd参数,则只需要今天。 该解决方案不关心年份是否leap年,但很容易检查这一点。 祝你有美好的一天。
答案 4 :(得分:-1)
如果您设置的日期大于当前日期,则必须首先回退月份。
完成此操作后,您可以设置日期。
const dates = [
{ in: '2020-10-05T00:00:00Z', out: '2020-10-05T00:00:00.000Z' },
{ in: '2020-10-06T00:00:00Z', out: '2020-10-05T00:00:00.000Z' },
{ in: '2020-11-06T00:00:00Z', out: '2020-11-05T00:00:00.000Z' },
{ in: '2020-11-23T00:00:00Z', out: '2020-11-05T00:00:00.000Z' },
{ in: '2020-11-04T00:00:00Z', out: '2020-10-05T00:00:00.000Z' },
{ in: '2020-01-01T00:00:00Z', out: '2019-12-05T00:00:00.000Z' }
],
dayOfMonth = 5;
/**
* Takes a UTC date modifies the day of month.
* @param {Date} dateObj
* @param {int} dayOfMonth
* @return Returns a past date for the provided dateObj
*/
const toBaseDate = (dateObj, dayOfMonth) => {
const [ date, month ] = [ dateObj.getUTCDate(), dateObj.getUTCMonth() ];
if (date === dayOfMonth) return dateObj;
if (date < dayOfMonth) dateObj.setUTCMonth(month - 1);
dateObj.setUTCDate(dayOfMonth);
return dateObj;
}
console.log(dates.every(dateString => {
const date = new Date(dateString.in);
const baseDate = toBaseDate(date, dayOfMonth);
return baseDate.toISOString() === dateString.out;
}) ? 'pass' : 'fail');
.as-console-wrapper { top: 0; max-height: 100% !important; }