Javascript从出生日期算起的年龄

Adi*_*att 5 javascript

我将我选择的日历传递date of birth给以下JS函数来计算Age:

var DOBmdy = date.split("-"); 
    Bdate = new Date(DOBmdy[2],DOBmdy[0]-1,DOBmdy[1]); 
    BDateArr = (''+Bdate).split(' '); 
    //document.getElementById('DOW').value = BDateArr[0]; 
    Cdate = new Date; 
    CDateArr = (''+Cdate).split(" ");
    Age = CDateArr[3] - BDateArr[3]; 
Run Code Online (Sandbox Code Playgroud)

现在,让我们说,输入年龄是:2nd Aug 1983和年龄计数来:28,虽然8月没有通过,我想显示当前的年龄27而不是28

任何想法,我怎么能写出那个逻辑,用我的JS函数27 完美地计算年龄.

谢谢 !

Koo*_*Inc 10

出生日期是1983年8月2日,然后是那个日期之间的毫秒差异是:

var diff = new Date - new Date('1983-08-02');
Run Code Online (Sandbox Code Playgroud)

天数的差异是(1秒= 1000毫秒,1小时= 60*60秒,1天= 24*1小时)

var diffdays = diff / 1000 / (60 * 60 * 24);
Run Code Online (Sandbox Code Playgroud)

多年(因此,年龄)的差异变成(.25来说是为了成年):

var age = Math.floor(diffdays / 365.25);
Run Code Online (Sandbox Code Playgroud)

现在尝试一下

diff = new Date('2011-08-01') - new Date('1983-08-02'); //=> 27
diff = new Date('2011-08-02') - new Date('1983-08-02'); //=> 28
diff = new Date('2012-08-02') - new Date('1983-08-02'); //=> 29
Run Code Online (Sandbox Code Playgroud)

所以,你的javascript可以改写为:

var Bdate   = new Date(date.split("-").reverse().join('-')),
    age     = Math.floor( ( (Cdate - Bdate) / 1000 / (60 * 60 * 24) ) / 365.25 );
Run Code Online (Sandbox Code Playgroud)

[ 编辑 ]没有引起足够的重视.date.split('-')给出数组[dd,mm,yyyy],因此反转它会产生[yyyy,mm,dd].现在再次使用' - '连接,结果是字符串'yyyy-mm-dd',它是新的有效输入Date.