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

时间:2015-10-17 17:56:23

标签: javascript jquery html jquery-ui-datepicker date-formatting

我想根据出生日期计算年龄。我可以很容易地做日期格式mm / dd / yyyy,但是当我尝试为dd / mm / yyyy做同样的事情时,我得到年龄= 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;
        }
    });

2 个答案:

答案 0 :(得分:4)

发生这种情况的原因是因为新的Date(ValueHere)调用Date.parse(),这需要有效的格式。请参阅下文以获取具体信息。

使用Regex为您提供解决方案。

取代:

dob = new Date(value),

使用:(根据您的特定格式编辑)

dob = new Date(value.replace(/(\d{2})[-/](\d{2})[-/](\d+)/, "$2/$1/$3"));

用于演示解决方案的精简小提琴:(根据您的特定格式更新)

http://jsfiddle.net/chrislewispac/e7zjskos/2/

来自:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

和: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

new Date(dateString);

dateString:

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

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

链接到ECMA-262日期标准:

http://www.ecma-international.org/ecma-262/6.0/index.html#sec-date-time-string-format

链接到StackOverflow解决方案:

Convert dd-mm-yyyy string to date

答案 1 :(得分:1)

发现它了!这是我的完整代码:

<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>

这将在警报框中显示您当前的年龄。

P.S。指出,所有浏览器都不支持“日期”输入!在Chrome上正常运行!