我正试图根据选择语句计算出用户的年龄。
我无法从用户输入计算当前(年/月/日/小时/分钟)。
这样做的目的是让用户看到3个框来选择[月][日]和[年]出生。
根据答案,我想计算当前日期减去用户选择的日期。
由于某种原因,我不能使逻辑工作。我可以硬编码,但我希望它是合乎逻辑的。
下面是我的代码:<!DOCTYPE>
<html>
<title>Validate Credit Cards</title>
<head>
<script type="text/javascript">
/* <![CDATA[ */
/* ]]> */
</script>
</head>
<body>
<form action="">
<h1>Age Calculator</h1>
<p>Birth Date:
<select name="month">
<option>Month</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option>12</option>
</select>
<select name="day">
<option>Day</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option>12</option>
<option>13</option>
<option>14</option>
<option>15</option>
<option>16</option>
<option>17</option>
<option>18</option>
<option>19</option>
<option>20</option>
<option>21</option>
<option>22</option>
<option>23</option>
<option>24</option>
<option>25</option>
<option>26</option>
<option>27</option>
<option>28</option>
<option>29</option>
<option>30</option>
<option>31</option>
</select>
<select name="year">
<option>Year</option>
<option>1950</option>
<option>1951</option>
<option>1952</option>
<option>1953</option>
<option>1954</option>
<option>1955</option>
<option>1956</option>
<option>1957</option>
<option>1958</option>
<option>1959</option>
<option>1960</option>
<option>1961</option>
<option>1962</option>
<option>1963</option>
<option>1964</option>
<option>1965</option>
<option>1966</option>
<option>1967</option>
<option>1968</option>
<option>1969</option>
<option>1970</option>
<option>1971</option>
<option>1972</option>
<option>1973</option>
<option>1974</option>
<option>1975</option>
<option>1976</option>
<option>1977</option>
<option>1978</option>
<option>1979</option>
<option>1980</option>
<option>1981</option>
<option>1982</option>
<option>1983</option>
<option>1984</option>
<option>1985</option>
<option>1986</option>
<option>1987</option>
<option>1988</option>
<option>1989</option>
<option>1990</option>
<option>1991</option>
<option>1992</option>
<option>1993</option>
<option>1994</option>
<option>1995</option>
<option>1996</option>
<option>1997</option>
<option>1998</option>
<option>1999</option>
<option>2000</option>
<option>2001</option>
<option>2002</option>
<option>2003</option>
<option>2004</option>
<option>2005</option>
<option>2006</option>
<option>2007</option>
<option>2008</option>
<option>2009</option>
<option>2010</option>
</select>
</p>
<p><input type="button" value="Calculate" onclick="calcAge()" /></p>
<h2>You have lived</h2>
<p><input type="text" name="yearCalc" size="7" /> years</p>
<p><input type="text" name="monthCalc" size="7" /> months</p>
<p><input type="text" name="dayCalc" size="7" /> days</p>
<p><input type="text" name="hourCalc" size="7" /> hours</p>
<p><input type="text" name="minCalc" size="7" /> minutes</p>
</form>
<script>
function calcAge()
{
var d1 = new Date();
var month = document.forms[0].month.value;
var day = document.forms[0].day.value;
var year = document.forms[0].year.value;
var yearCalc = 2012 - year;
var monthCalc = parseInt(month);
var dayCalc = Math.abs(d1 - parseInt(day));
var hourCalc = Math.round();
var minCalc = Math.round();
document.forms[0].yearCalc.value = yearCalc.toLocaleString();
document.forms[0].monthCalc.value = monthCalc.toLocaleString();
document.forms[0].dayCalc.value = dayCalc.toLocaleString();
document.forms[0].hourCalc.value = hourCalc.toLocaleString();
document.forms[0].minCalc.value = minCalc.toLocaleString();
}
</script>
Date对象(http://www.w3schools.com/jsref/jsref_obj_date.asp)预先打包了一些很好的函数,更值得注意的是getTime()函数,它以毫秒为单位返回Date对象自1970年以来的时间,除了单位(Unix时间是秒)之外,它基本上与Unix时间相同。要确定年龄,我们所需要做的就是将用户的选择存储为Date对象,然后取now与用户输入的值之间的差值。
var d1 = new Date();
d1.setMonth(document.forms[0].month.value);
d1.setDay(document.forms[0].day.value);
d1.setYear(document.forms[0].year.value);
var now = new Date();
var ageInMs = now.getTime() - d1.getTime();
var ageInYears = ageInMs / 86400000 / 365;
由于getTime()函数返回毫秒,我们需要将其转换为年。一天大约有86400,000毫秒,一年大约有365天。
编辑:如果组合框的值实际上是字符串,则可能需要对它们使用parseInt()。这将是一个简单的更改-而不是
d1.setMonth(document.forms[0].month.value);
你会做d1.setMonth(parseInt(document.forms[0].month.value, 10));