我将我选择的日历传递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.