如何在一个代码中检查无效的日期格式和超过18年的有效期

How to check both invalid date format and age greater than 18 years validation in one code?

本文关键字:格式 日期 无效 有效期 18年 检查 代码 一个      更新时间:2023-09-26

我已经编写了如下的javascript

    <script type="text/javascript">
    function ValidateDate() {
        var dt = document.getElementById("<%=txtDOB.ClientID%>").value;
        var currentTime = new Date();
        var inputdate = dt;
        currentTime = currentTime.format('dd-MMM-yyyy');
        if (dt == "" || dt == undefined) {
            document.getElementById("<%=lblValidDate.ClientID%>").style.display = "none";
        }
        else {  
        var inputdate = dt;
            if (new Date(inputdate).getYear() <= new Date(currentTime).getYear() - 18) {
                document.getElementById("<%=lblValidDate.ClientID%>").style.display = "none";
                return true;
            }
            else if(new Date(inputdate).getYear() >= new Date(currentTime).getYear() - 18)
            {
                    document.getElementById("<%=lblValidDate.ClientID%>").style.display = "block";
                    return false;
                }
        else {
                document.getElementById("<%=lblValidDate.ClientID%>").style.display = "none";
                return false;
            }
        }
    }
</script>

在html 中

<div style="display:none" id="dateformaterror">Please enter date in    mm/dd/yyyy or m/d/yyyy format</div>
   <asp:Label runat="server" ID="lblValidDate" Style="color: Red; display: none;"><b>Minimum Age should be 18 years old</b></asp:Label>
  <asp:TextBox ID="txtDOB" CssClass="datepiker" runat="server" onchange="ValidateDate()"></asp:TextBox>

我希望上面的javascript应该检查这两个验证。一个是年龄应该在18岁以上,第二个是如果用户以错误的格式输入日期,我的意思是不是mm/dd/yyyy或m/d/yyyy格式,那么带有类datefomateror的div应该是可见的?

请帮帮我!!!同时指导我改进javascript代码。

var start ="1989-01-10";
// ex) 2014-08-10
if (start.length != 10 || start.indexOf("-") < 0) {
    alert("[Error] Check date form");
    return null;
}
// get Age
var nowDate = new Date();
var birth = new Date(start);
var now = nowDate.getFullYear();
var my =birth.getFullYear();
var myAge = now - my -1;
if(myAge < 18) {
    alert("You are so young");
}
else if (myAge <0) {
    alert("Please,Try again");
}
else
    alert("You are "+ myAge);
确认日期有效性的一种方法是在Date中使用valueOf()方法。

示例:

    var a = new Date('12/15/2015');
    isNaN(a.valueOf()); // false, this means it is a valid date.
    // whereas an invalid date would return true
    a = new Date('14/15/2015');
    isNaN(a.valueOf()); // true

您可以使用它来检查输入的日期是否有效。isNan检查一个数字是否为Not a Number

所以你的ValidateDate()方法可以是这样的:

    function ValidateDate() {
        var inputDateString = document.getElementById('date').value,
            inputDate = new Date(inputDateString),
            invalidErrorMessage =  document.getElementById('invalid'), // Replace with your ID
            below18ErrorMessage = document.getElementById('below18'); // Replace with your ID
        invalidErrorMessage.style.display = 'none';
        below18ErrorMessage.style.display = 'none';
        if (!inputDateString.trim() || isNaN(inputDate.valueOf()) {
           invalidErrorMessage.style.display = "block";
           return;
        }
        if (new Date().getFullYear() - inputDate.getFullYear() < 18) {
            below18ErrorMessage.style.display = "block";
            return;
        }
    }

请注意,在这张支票中,-/都给出了有效日期。

也在这里

    var currentTime = new Date();
    currentTime = currentTime.format('dd-MMM-yyyy');

Date没有format()方法,除非您更改了其prototype

在这里使用这个小提琴以获得更多参考。

您可以尝试Moment.js来篡改日期-http://momentjs.com/

还可以看看这个:Moment.js-我如何获得约会后的年数,而不是四舍五入?