2

我想根據出生日期計算年齡。我可以很容易地使用日期格式mm/dd/yyyy,但是當我嘗試對dd/mm/yyyy執行相同操作時,我的年齡= NaN。這裏是我的代碼邏輯:以dd/mm/yyyy日期格式爲基礎計算出生日期

$('#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; 
     } 
    }); 
+0

你想年齡或年,月,日的年齡 – 2015-10-17 18:07:13

+0

@ C0smo謝謝您的評論先生。 ...我想多年請 –

+0

我解決了同樣的問題,在JavaScript的第一天。這不是一個典型的問題。只需使用split()函數從輸入日期中提取年份並從當年減去。爲split()函數定義搜索谷歌。 –

回答

3

之所以出現這種情況是因爲新的日期(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

新日期(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

,並鏈接到計算器的解決方案:

Convert dd-mm-yyyy string to date

+0

謝謝您的答案先生...我嘗試了你的方法,但我得到了一個無效的日期dob –

+1

我道歉,嘗試新的代碼。我必須調整你的特定格式的正則表達式。 –

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