根据 dd/mm/yyyy 日期格式的出生日期计算年龄
Calculate age based on date of birth for dd/mm/yyyy date format
我想根据出生日期计算年龄。我可以很容易地为日期格式 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),
使用:(针对您的特定格式进行编辑)
dob = new Date(value.replace(/(\d{2})[-/](\d{2})[-/](\d+)/, "//"));
精简 fiddle 以演示解决方案:(针对您的特定格式进行了更新)
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
新日期(dateString);
日期字符串:
表示日期的字符串值。字符串应采用 Date.parse() 方法可识别的格式(符合 IETF 标准的 RFC 2822 时间戳以及 ISO8601 版本)。
无法识别为 ECMA-262 定义的 ISO 格式的日期字符串中的无效值可能会或可能不会导致 NaN,具体取决于浏览器和提供的值。
Link 到 ECMA-262 日期标准:
http://www.ecma-international.org/ecma-262/6.0/index.html#sec-date-time-string-format
和link到Whosebug的解决方案:
Convert dd-mm-yyyy string to date
找到了!这是我的完整代码:
<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. 就是说,'date' 并非所有浏览器都支持输入!在 Chrome 上正常工作!
我想根据出生日期计算年龄。我可以很容易地为日期格式 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),
使用:(针对您的特定格式进行编辑)
dob = new Date(value.replace(/(\d{2})[-/](\d{2})[-/](\d+)/, "//"));
精简 fiddle 以演示解决方案:(针对您的特定格式进行了更新)
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
新日期(dateString);
日期字符串:
表示日期的字符串值。字符串应采用 Date.parse() 方法可识别的格式(符合 IETF 标准的 RFC 2822 时间戳以及 ISO8601 版本)。
无法识别为 ECMA-262 定义的 ISO 格式的日期字符串中的无效值可能会或可能不会导致 NaN,具体取决于浏览器和提供的值。
Link 到 ECMA-262 日期标准:
http://www.ecma-international.org/ecma-262/6.0/index.html#sec-date-time-string-format
和link到Whosebug的解决方案:
Convert dd-mm-yyyy string to date
找到了!这是我的完整代码:
<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. 就是说,'date' 并非所有浏览器都支持输入!在 Chrome 上正常工作!