Javascript 从输入和输入中计算出一个人的年龄;日期对象
在获得用户输入的出生信息后,我想将他们的年龄转换为毫秒,然后从当前日期中减去它以返回他们的年龄,我如何正确地做到这一点Javascript 从输入和输入中计算出一个人的年龄;日期对象,javascript,date,Javascript,Date,在获得用户输入的出生信息后,我想将他们的年龄转换为毫秒,然后从当前日期中减去它以返回他们的年龄,我如何正确地做到这一点 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
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 dt1 = new Date();
var age = (dt1.getTime() - d.getTime()) / (60 * 60 * 24 * 1000);
上述情况可能会受到夏令时或夏令时以外的变化的影响。要避免这种情况,请使用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
如果你想,比如说,一个18岁的孩子在实际生日前等待2到3天的时间差,那么闰年就需要计算在内 你可以估计一年为365.25,通常是正确的
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;
}
函数年龄从YMD(y,m,d){
变量年、月、日、dA、nA、,
dob=新日期(y,m-1,d),
现在=新日期();
现在。设定小时数(0,0,0,0);
dA=[dob.getUTCFullYear(),dob.getUTCMonth(),dob.getUTCDate()];
nA=[now.getUTCFullYear(),now.getUTCMonth(),now.getUTCDate()];
年份=nA[0]-dA[0];
月份=nA[1]-dA[1];
天数=nA[2]-dA[2];
如果(monthNew Date(newDate().getTime()-new Date(生日、月、生日).getTime()).getTime()/1000/3600/24/365.25;如果以毫秒为单位计算年龄,则无法可靠地以天为单位显示年龄。任何更大的时间单位(如年)长度不同,因此您必须从出生日期开始以时间单位计算年龄,而不仅仅是出生日期和今天日期之间的差异。-使用getTime()获取日期对象时间(毫秒)的成员函数-从当前时间中扣除用户的出生日期时间,这是我应该做的^Thx。@Chera您不需要使用getTime()
,只需从另一个日期对象中减去一个日期对象,结果将是毫秒的差值。
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;
}