Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据出生日期计算年龄,日期格式为dd/mm/yyyy_Javascript_Jquery_Html_Jquery Ui Datepicker_Date Formatting - Fatal编程技术网

Javascript 根据出生日期计算年龄,日期格式为dd/mm/yyyy

Javascript 根据出生日期计算年龄,日期格式为dd/mm/yyyy,javascript,jquery,html,jquery-ui-datepicker,date-formatting,Javascript,Jquery,Html,Jquery Ui Datepicker,Date Formatting,我想根据出生日期计算年龄。对于日期格式mm/dd/yyyy,我可以很容易地执行此操作,但当我尝试对dd/mm/yyyy执行相同操作时,我得到了age=NaN。以下是我的代码逻辑: $('#DateOfBirth').datepicker({ onSelect: function (value, ui) { var today = new Date(), dob = new Date(value),

我想根据出生日期计算年龄。对于日期格式mm/dd/yyyy,我可以很容易地执行此操作,但当我尝试对dd/mm/yyyy执行相同操作时,我得到了age=NaN。以下是我的代码逻辑:

$('#DateOfBirth').datepicker({
        onSelect: function (value, ui) {
            var today = new Date(),
                dob = new Date(value),

                age = today.getFullYear() - dob.getFullYear(); //This is the update
            $('#age').val(age);
            alert(age);
        },
        //maxDate: "-16Y",
        maxDate: maxDateVal,
        showOn: "both",
        buttonImage: "",
        dateFormat: "dd/mm/yy",
        changeMonth: true,
        changeYear: true,
        yearRange: '1920:c'

    }).keydown(function (e) {
        if (e.keyCode == 8 || e.keyCode == 46) {
            $(e.target).val("");
        } else {
            e.preventDefault();
            return false;
        }
    });

发生这种情况的原因是,new Date(ValueHere)调用Date.parse(),这需要有效的格式。有关详细信息,请参见下文

使用正则表达式为您提供解决方案

而不是:

dob = new Date(value),
使用:(针对特定格式进行编辑)

简化的小提琴演示解决方案:(针对您的特定格式更新)

发件人:

以及:

新日期(日期字符串)

日期字符串:

表示日期的字符串值。字符串应采用Date.parse()方法识别的格式(符合IETF的RFC 2822时间戳,也是ISO8601的一个版本)

根据ECMA-262的定义,日期字符串中未识别为ISO格式的无效值可能会或可能不会导致NaN,具体取决于浏览器和提供的值

链接到ECMA-262日期标准:

并链接到StackOverflow解决方案:


找到了!这是我的完整代码:

<head>
<title>Know your age</title>
</head>

<body>
<div>

<h3>Enter your Birth Date</h3> </div>
<div><input type="date" id="birthdate" /> <input type="button" value="Submit" id="acceptbutton" /> </div>
</body>
<script>
function getAge(){
var newDateObject = new Date();

var newObjectCurrentYear = newDateObject.getFullYear();

var userDateObject = document.getElementById("birthdate").value;

var userDateObjectPieces = userDateObject.split("-");

var userObjectYear = userDateObjectPieces[0];

if ( newObjectCurrentYear > userObjectYear){
var currentAge = parseInt(newObjectCurrentYear) - parseInt(userObjectYear);
alert("Your Current Age is: " + currentAge + " " +(currentAge>1?"years":"year"));
}

else{
alert("Birth-Year must be lower than Current-Year.\nPlease Enter Again.");
}

}

var simpleButton = document.getElementById("acceptbutton");
simpleButton.addEventListener("click",getAge);
</script>
</html>

了解你的年龄
输入您的出生日期
函数getAge(){
var newDateObject=新日期();
var newObjectCurrentYear=newDateObject.getFullYear();
var userDateObject=document.getElementById(“生日”).value;
var userDateObjectPieces=userDateObject.split(“-”);
var userObjectYear=userDateObjectPieces[0];
如果(newObjectCurrentYear>userObjectYear){
var currentAge=parseInt(newObjectCurrentYear)-parseInt(userObjectYear);
警告(“您当前的年龄是:“+currentAge+”+(currentAge>1?“年”:“年”);
}
否则{
警告(“出生年份必须低于当前年份。\n请重新输入。”);
}
}
var simpleButton=document.getElementById(“acceptbutton”);
simpleButton.addEventListener(“单击”,获取年龄);
这将在警告框中显示您当前的年龄


p.S.指出并非所有浏览器都支持“日期”输入!在Chrome上正常工作

你想要的年龄是以年为单位还是以年、月为单位,day@C0smo谢谢你的评论。。。我希望在几年内完成,我在javascript的第一天就解决了同样的问题。这不是一个典型的问题。只需使用split()函数从输入日期中提取年份,然后从当前年份中减去。对于split()函数定义,请在google上搜索。谢谢您的回答。。。我尝试了你的方法,但我得到了一个无效的日期为我的道歉,尝试新的代码。我不得不根据您的具体格式调整正则表达式。谢谢您的回答和承诺这是我的解决方案:)。。。我提出了另一个问题,但与UI无关。。。谢谢你,先生
<head>
<title>Know your age</title>
</head>

<body>
<div>

<h3>Enter your Birth Date</h3> </div>
<div><input type="date" id="birthdate" /> <input type="button" value="Submit" id="acceptbutton" /> </div>
</body>
<script>
function getAge(){
var newDateObject = new Date();

var newObjectCurrentYear = newDateObject.getFullYear();

var userDateObject = document.getElementById("birthdate").value;

var userDateObjectPieces = userDateObject.split("-");

var userObjectYear = userDateObjectPieces[0];

if ( newObjectCurrentYear > userObjectYear){
var currentAge = parseInt(newObjectCurrentYear) - parseInt(userObjectYear);
alert("Your Current Age is: " + currentAge + " " +(currentAge>1?"years":"year"));
}

else{
alert("Birth-Year must be lower than Current-Year.\nPlease Enter Again.");
}

}

var simpleButton = document.getElementById("acceptbutton");
simpleButton.addEventListener("click",getAge);
</script>
</html>