2015-11-19 172 views
1

我正在尝试计算用户在个月,日,小时和分钟(包括闰年)的年龄。。但是,我不是使用HTML中的选择/选项,而是通过Javascript输入选项。由于这个原因,我现在对如何在JavaScript中进行计算感到困惑。任何人都可以指出我正确的方向来做这些计算吗?年龄计算函数

HTML:

` <ul class = "mainList"> 
    <h1> 
     Age Calculator 
    </h1> 
    <h2> Enter Your Birthday</h2> 
    <li class = "firstList"> 
    <p class = "datePara"> 
     Date: 
    </p> 
    <select id = "day"> 
    </select> 
    </li> 
    <li> 
    <p class = "monthPara"> 
     Month: 
    </p> 
    <select id = "month"> 
    </select> 
    </li> 
    <li> 
    <p class = "yearPara"> 
     Year: 
    </p> 
    <select id = "year"> 
    </select> 
    </li> 
    </ul>` 

的Javascript:`

var startyear = "1950"; 
var endyear = "2015"; 
var dat = new date(); 
var curday = dat.getDate(); 
var curmon = dat.getMonth() + 1; 
var curyear = dat.getFullYear(); 


function initForm() { 

    document.getElementById('day').focus(); 

for (var i = 1; i <= 31; i ++) { 

    var thisDay = document.getElementById('day'); 
    var dayOption = document.createElement('option'); 

    dayOption.text = i; 
    thisDay.add(dayOption, i); 
} 

for (var i = 1; i <= 12; i ++) { 

    var thisMonth = document.getElementById('month'); 
    var monthOption = document.createElement('option'); 

    monthOption.text = i; 
    thisMonth.add(monthOption, i); 
} 

for (var i = startyear; i <= endyear; i ++) { 

    var thisYear = document.getElementById('year'); 
    var yearOption = document.createElement('option'); 

    yearOption.text = i; 
    thisYear.add(yearOption, i); 
} 
}` 
+0

目前还不清楚你在计算什么。 1950年与这个人的年龄有什么关系? –

+0

@JohnnyMopp计算应计算他们的年龄从1950年1月1日或他们想要在当时和当前日期之间输入的任何其他日期。抱歉,缺乏清晰度。 –

+0

所以,你真的只是计算两个日期(今天和其他日期)之间的差异。这与生日没有任何关系。例如,如果你和我都是在1950年以后出生的,那么无论我们的生日如何,我们都会有同样的1950年代。 –

回答

0

MomentJS有一个会自动处理这个问题,考虑闰年/当地时间/等保健fromNow()函数。这很容易使用;你只是从你的用户输入和调用moment.fromNow()开始实例化一个'时刻'。

编辑:另类,没有一刻:

day=document.getElementById('day').value; 
month=document.getElementById('month').value; 
year=document.getElementById('year').value; 
birthdate=new Date(year, month-1, day); // 'month' is zero-indexed. 
today = new Date(); 
age = (today-birthdate)/(1000*60*60*24*365.25); 
// /1000 = seconds, /60=minutes, /60=hours, /24=days, /365.25=years, factor leap years 

编辑:我知道你要自己实现,但这里有一个简单的例子反正:

day=document.getElementById('day').value; 
month=document.getElementById('month').value; 
year=document.getElementById('year').value; 
birthdate=new Date(year, month-1, day); // 'month' is zero-indexed. 
today = new Date(); 
age = moment(today).diff(moment(birthdate), 'year'); 

你可以跳过moment和只需取出日期对象(today-birthdate)之间的差异,它将以毫秒为单位给出时间间隔。使用moment的优点是,在考虑闰年和间隔的开始日期的同时,时间间隔将是正确的。

+1

如果你要推荐另一个工具,或许可以添加一些示例代码来说明这将对海报有效吗? – Trasiva

+0

@nrlakin我宁愿不使用外部工具。而不是执行其他来源来为我做这件事,谢谢你的建议! –

+0

@Trasiva Good point,done。 – nrlakin

0

要计算这样的事情,你要通过采取差别的年,月,天等,这两个日期的开始:

var yearsBetween = currentDate.getYear() - targetDate.getYear(); 
var monthsBetween = currentDate.getMonth() - targetDate.getMonth(); 
var daysBetween = currentDate.getDate() - targetDate.getDate(); 
var hoursBetween = currentDate.getHours() - targetDate.getHours(); 
var minutesBetween = currentDate.getMinutes() - targetDate.getMinutes(); 
var secondsBetween = currentDate.getSeconds() - targetDate.getSeconds(); 

但是一些值会负。在这种情况下,你需要调整下一个最高单位值进行补偿:

if(secondsBetween < 0) { 
    secondsBetween += 60; 
    minutesBetween -= 1; 
} 
if(minutesBetween < 0) { 
    minutesBetween += 60; 
    hoursBetween -= 1; 
} 
... 
if(daysBetween < 0) { 
    // http://stackoverflow.com/a/1184359/120955 
    var daysInTargetMonth = new Date(targetDate.getYear(), targetDate.getMonth() + 1, 0).getDate(); 
    daysBetween += daysInTargetMonth; 
    monthsBetween -= 1; 
} 

然后,终于,这听起来像你不在乎年,所以你要卷进那些月数:

monthsBetween += yearsBetween * 12;