如果日期不在日历中退出,我想验证我的日期,然后返回我最后一个日历日期,
示例01
Input Date : 31-Feb-2017
Return Result : 28-Feb-2017
示例02
Input Date : 31-March-2017
Return Result : 31-March-2017
示例03
Input Date : 31-Apr-2017
Return Result : 30-Apr-2017
示例04
Input Date : 31-Jun-2017
Return Result : 30-Jun-2017
Leaf年度示例05
Input Date : 31-Feb-2020
Return Result : 29-Feb-2020
这是我首先尝试使用以下函数验证日期,我如何为上述日期制作逻辑。
function isValidDate(year, month, day) {
var d = new Date(year, month, day);
if (d.getFullYear() == year && d.getMonth() == month && d.getDate() == day) {
return true;
}
return false;
}
答案 0 :(得分:2)
该月的最后一天是下个月的零日,因此:
function getDate(year, month, day) {
var d = new Date(year, month, day);
if (d.getMonth() == month) {
return d;
}
return new Date(year, +month + 1, 0);
}
console.log(getDate(2017,1,29).toString());
console.log(getDate(2017,0,32).toString());

顺便说一下,要测试一个有效的日期,你只需要测试月份,因为如果月份大于一年中的月份,它将影响月份和年份。如果日期大于该月份的天数,则也会影响该月份。没有什么影响这一年(除非你通过一年不到100,在这种情况下,它被视为1900 +年)。
答案 1 :(得分:0)
您可以尝试这样的事情:
当我们使用2个或更多参数调用date构造函数时,它会尝试使用以下构造函数spec进行处理:
new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )
此处,如果未传递任何值,则将其设置为NaN
,稍后将解析为+0
。因此,时间戳为0:0:0
现在诀窍在于内部调用的函数:ref。
如第8点所示,它返回
Day(t) + dt − 1
此处Day(t)
将返回毫秒数,日期将根据dt - 1
计算。由于我们传递0
,因此日期值为-1 + milliseconds
,因此它会返回前一天。
另一种替代方法是为下个月1日创建日期,并将1
减去day
或sec
。您可以根据需要选择任何人,
function isValidDate(year, month, day) {
var d = new Date(year, month, day);
return !!(d.getFullYear() == year && d.getMonth() == month && d.getDate() == day)
}
function computeLastPossibleDate(y,m,d){
return new Date(y, m+1, 0);
}
function test(y,m,d){
return isValidDate(y,m,d) ? new Date(y,m,d) : computeLastPossibleDate(y,m,d)
}
// 31st Feb.
console.log(test(2017, 1, 31).toString())
// 31st March
console.log(test(2017, 2, 31).toString())
// 31st April
console.log(test(2017, 3, 31).toString())
// 50th Dec.
console.log(test(2017, 11, 50).toString())

注意:如果有任何遗漏,请在投票时将其作为评论分享。只是投票而不发表评论对任何人都没有帮助。
答案 2 :(得分:0)
function isValidDate(year, month, day) {
var d = new Date(year, month, day);
if (d.getFullYear() == year && d.getMonth() == month && d.getDate() == day) {
return d;
}
else
rturn new Date(year, month, 0);;
}
答案 3 :(得分:0)
function isValidDate(year, month, day) {
if(month<=12){
var temp_day=day;
var d = new Date(year, month, day);
var lastDay = new Date(d.getFullYear(), d.getMonth(),0);
var getlastday=lastDay.getDate();
if(getlastday<=day){
//var date=(d.getDate())+"/"+(d.getMonth())+"/"+(d.getFullYear());
var date=(getlastday)+"-"+(month)+"-"+(lastDay.getFullYear());
return date;
}else{
//var date=(lastDay.getDate())+"-"+(lastDay.getMonth())+"-"+(lastDay.getFullYear());
var date=(day)+"/"+(month)+"/"+(year);
return date;
}
}
else{
return "month not valid";
}
}
试试这段代码