javascript - 如何用javascript中选择的日期计算当前日期?

标签 javascript

我正在尝试根据选择语句计算出用户的年龄。

我无法根据用户输入计算当前(年/月/日/小时/分钟)。

目的是用户将看到 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() 函数,它以 1970 年以来的毫秒为单位返回 Date 对象的时间,除了单位之外,它与 Unix 时间基本相同 (Unix时间为秒)。要确定年龄,我们需要做的就是将用户的选择存储为 Date 对象,然后计算现在与用户输入的内容之间的差异。

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() 函数返回毫秒,因此我们需要将其转换为年。一天有 86,400,000 毫秒,一年有 365 天(大约)。

编辑: 如果组合框的值实际上是字符串,您可能需要对它们使用 parseInt() 。不过,这将是一个简单的更改 - 而不是

d1.setMonth(document.forms[0].month.value);

你会的

d1.setMonth(parseInt(document.forms[0].month.value, 10));

关于javascript - 如何用javascript中选择的日期计算当前日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15710580/

相关文章:

javascript - 使用 MySQL/Javascript 计算百分比

javascript - 使用 ng-repeat 映射嵌套值

javascript - React.js 的 Component 哪种语法比较好

javascript - 按 Node 下载图像(请求)

javascript - 使用 vue.js v-for 功能和 axios 获取每个未定义错误的控制台

javascript - 如何删除淡入?

javascript - 正则表达式强制特定 3 个字符

javascript - Node.JS 异步调用mySql

javascript - jquery 插件,settimeout 和 div 没有被追加,简单奇怪的情况

javascript - 我可以在 Angular 模型中使用 for ... in 语法吗?