从输入和日期对象中计算出一个人的年龄
问题描述:
获得用户对他们的出生信息的输入后,我想将他们的年龄转换为毫秒,然后从当前日期中扣除它以返回他们的年龄,我该怎么做正确?:从输入和日期对象中计算出一个人的年龄
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);
答
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)
新日期(newDate()的getTime() - 新日期(birthYear,monthNum,生日).getTime())。的getTime()/ 1000/3600/24/365.25; – 2012-03-20 13:40:06
如果计算以毫秒为单位的年龄,则无法可靠地显示任何大型单位的年龄,而不是日期。任何较大的时间单位(例如年)都会有所不同,因此您必须从出生日期起计算出时间单位的年龄,而不仅仅是出生日期和今天日期之间的差异。 – Guffa 2012-03-20 13:41:31
- 使用getTime()成员函数获取Date对象的时间(以毫秒为单位) - 从当前时间减去用户的出生日期 这就是我应该做的事情^ Thx。 – Chara 2012-03-20 13:44:19