【问题标题】:Calculate age based on date of birth for dd/mm/yyyy date format根据 dd/mm/yyyy 日期格式的出生日期计算年龄
【发布时间】:2015-10-17 17:56:22
【问题描述】:

我想根据出生日期计算年龄。对于日期格式 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;
        }
    });

【问题讨论】:

  • 你想要的年龄只是年还是年、月、日
  • @C0smo 感谢先生的评论。 ...我想要它在几年内请
  • 我在使用 javascript 的第一天就解决了同样的问题。这不是一个典型的问题。只需使用 split() 函数从输入日期中提取年份并从当前年份中减去。对于 split() 函数定义搜索google。

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


【解决方案1】:

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

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

代替:

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

新日期(日期字符串);

日期字符串:

代表日期的字符串值。该字符串应采用 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

【讨论】:

  • 感谢您的回答...我尝试了您的方法,但我的出生日期无效
  • 抱歉,尝试新代码。我必须根据您的特定格式调整正则表达式。
  • 感谢先生的回答和承诺,这是我的解决方案:))) ...我提出了另一个问题,但与 UI 无关...谢谢先生
【解决方案2】:

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

<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 上正常工作!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    相关资源
    最近更新 更多