Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从输入和输入中计算出一个人的年龄;日期对象_Javascript_Date - Fatal编程技术网

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;
}