JavaScript验证日期并返回日历的最后可用日期

时间:2017-03-17 07:18:14

标签: javascript jquery date

如果日期不在日历中退出,我想验证我的日期,然后返回我最后一个日历日期,

示例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;
}

4 个答案:

答案 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)

您可以尝试这样的事情:

http://moduscreate.com/code-splitting-for-react-router-with-es6-imports/说明:

当我们使用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减去daysec。您可以根据需要选择任何人,



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";
    }
}

试试这段代码