从输入和日期对象中计算出一个人的年龄

从输入和日期对象中计算出一个人的年龄

问题描述:

获得用户对他们的出生信息的输入后,我想将他们的年龄转换为毫秒,然后从当前日期中扣除它以返回他们的年龄,我该怎么做正确?:从输入和日期对象中计算出一个人的年龄

var birthYear = parseInt(prompt ('Enter your birth year:')); 
var birthMonth = prompt ('Enter the name of the month of birth:'); 
var birthDay = parseInt(prompt ('Enter your day of birth as an integer:')); 
var milliDay = 1000*60*60*24; //Milliseconds in a day 
monthAbb = 'janfebmaraprmayjunjulaugsepoctnovdec'; 
chineseZod = 12; 
zodCycle = 1924; //Chinese Zodiac Cycle 
var monthArr = new Array(11); 


monthArr [0] = "jan"; 
monthArr [1] = "feb"; 
monthArr [2] = "mar"; 
monthArr [3] = "apr"; 
monthArr [4] = "may"; 
monthArr [5] = "jun"; 
monthArr [6] = "jul"; 
monthArr [7] = "aug"; 
monthArr [8] = "sep"; 
monthArr [9] = "oct"; 
monthArr [10] = "nov"; 
monthArr [11] = "dec"; 

var monthNum = monthAbb.indexOf(birthMonth.slice(0, 3).toLowerCase())/3; 
alert(monthNum); 
var d = new Date (birthYear, monthNum, birthDay); 
alert(d); 
+1

新日期(newDate()的getTime() - 新日期(birthYear,monthNum,生日).getTime())。的getTime()/ 1000/3600/24/365.25; – 2012-03-20 13:40:06

+1

如果计算以毫秒为单位的年龄,则无法可靠地显示任何大型单位的年龄,而不是日期。任何较大的时间单位(例如年)都会有所不同,因此您必须从出生日期起计算出时间单位的年龄,而不仅仅是出生日期和今天日期之间的差异。 – Guffa 2012-03-20 13:41:31

+0

- 使用getTime()成员函数获取Date对象的时间(以毫秒为单位) - 从当前时间减去用户的出生日期 这就是我应该做的事情^ Thx。 – Chara 2012-03-20 13:44:19

var today=new Date(); 
var millisec=today.getTime(); 
alert(millisec); 

这将在毫秒回报你的时间。
例如计算年龄: -

var dt1 = new Date(); 
    var age = (dt1.getTime() - d.getTime())/(60 * 60 * 24 * 1000); 

var d0 = new Date(2012, 0, 1); // 1 January 2012 
var d1 = new Date(2012, 2, 31); // 31 March 2012 

alert(d1 - d0); // 7776000000 which is the difference in milliseconds 

上面可以通过或缩小夏令的变化的影响。为了避免这种情况,使用UTC:

var d0 = Date.UTC(2012, 0, 1); // 1 January 2012 
var d1 = Date.UTC(2012, 2, 31); // 31 March 2012 

alert(d1 - d0); // 7776000000 which is the difference in milliseconds 

闰年需要加以考虑,如果你想,比方说,一个十八岁的孩子等待2〜3天的差异,直到他的实际生日。

您可以估算一年为365.25 * 24 * 60 * 60 * 1000,并且通常是正确的。

function agefromYMD(y, m, d){ 
    var years, months, days, dA, nA, 
    dob= new Date(y, m-1, d), 
    now= new Date(); 
    now.setHours(0, 0, 0, 0); 
    return Math.floor((now-dob)/(365.25*24*60*60*1000)); 
} 

或者你可以看看日期,月份和全年。

function agefromYMD(y, m, d){ 
    var years, months, days, dA, nA, 
    dob= new Date(y, m-1, d), 
    now= new Date(); 
    now.setHours(0, 0, 0, 0); 
    dA= [dob.getUTCFullYear(), dob.getUTCMonth(), dob.getUTCDate()]; 
    nA= [now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()]; 
    years= nA[0]-dA[0]; 
    months= nA[1]-dA[1]; 
    days= nA[2]-dA[2]; 
    if(months<=0 && days<0)--months; 
    if(months<0)--years; 
    return years; 
} 

agefromYMD(1984,2,26)