繁体   English   中英

Javascript:计算从出生年份到今天的天,小时,分钟,秒

[英]Javascript: calculating days, hours, minutes, seconds from birth year to today

在我的程序中,通过提示值,我正在计算出生年份,下一个转变年份,天,小时,分钟和秒。 现在,我想计算该人从出生日期起还活着多长时间。 为此,我进行了下面的计算,但是我的存活天数,小时数,分钟数和秒数的计算显示不正确。 有人可以帮忙吗?

 var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; var today = new Date(); var myMonth = prompt("What month were you born in?"); var myDay = prompt("What day were you born on?"); var myYear = prompt("What year were you born in?"); var birthday = new Date(myYear, myMonth, myDay); var dateLoc = document.getElementById("dateField").innerHTML = "Today is " + today; var birthField = document.getElementById("birthField") .innerHTML = "I was born on " + monthNames[myMonth - 1] + ' ' + myDay + ', ' + myYear + '.' + '(' + myMonth + '/' + myDay + '/' + myYear + ')'; var milliseconds, seconds, minutes, hours, days; var years = today.getFullYear() - birthday.getFullYear(); myMonth--; var nextBirthday = (new Date(today.getFullYear(), myMonth, myDay)) < today ? (new Date(today.getFullYear() + 1, myMonth, myDay)) : (new Date(today.getFullYear(), myMonth, myDay)) console.log(nextBirthday); milliseconds = diff % 1000; diff = (diff - (milliseconds)) / 1000; seconds = diff % 60 diff = (diff - seconds) / 60; minutes = diff % 60 diff = (diff - minutes) / 60; hours = diff % 24 days = (diff - hours) / 24; var nextBirth = document.getElementById("nextBirth").innerHTML = "I am " + years + " Years old, and will turn " + (years + 1) + " in:" + "<br>" + days + " days, " + hours + " hours, " + minutes + " minutes, " + seconds + " seconds"; milliseconds = diffAlive % 1000; diffAlive = (diffAlive - (milliseconds)) / 1000; seconds = diffAlive % 60 diffAlive = (diffAlive - seconds) / 60; minutes = diffAlive % 60 diffAlive = (diffAlive - minutes) / 60; hours = diffAlive % 24 days = (diffAlive - hours) / 24; var aliveFor = document.getElementById("aliveFor").innerHTML = "I have been alive for..." + "<br>" + days + " days, " + hours + " hours, " + minutes + " minutes, " + seconds + " seconds"; 
 p { text-align: center; font-family: monospace; font-size: 20px; } body { background-image: url(birth.jpg"); background-repeat: no-repeat; background-size: 1300px 600px; } 
 <p id="dateField"> </p> <p id="birthField"> </p> <p id="nextBirth"> </p> <p id="aliveFor"> </p> 

输出:

在此处输入图片说明

在计算birthday时,您将错误的月份传递给Date构造函数。 从0开始。

在设置生日变量之前,将myMonth--行移至。

例如

myMonth--;
var birthday = new Date(myYear, myMonth, myDay);

如果您通过生日变量为11月的提示输入了“十月”,则您将在一个月前计算出您的“生日”。 因此,请参考以下代码段进行有效更改。 希望这可以帮助 :)

<head>
    <style>
    p {
        text-align: center;
        font-family: monospace;
        font-size: 20px;
    }

    body {

        background-image: url("birth.jpg");
        background-repeat: no-repeat;
        background-size: 1300px 600px;
    }
    </style>
    <title>program</title>
</head>

<body>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <p id="dateField"> </p>
    <p id="birthField"> </p>
    <p id="nextBirth"> </p>
    <p id="aliveFor"> </p>
    <script>
    var monthNames = ["January", "February", "March", "April", "May", "June",
        "July", "August", "September", "October", "November", "December"
    ];

    var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];

    var today = new Date();

    var myMonth = prompt("What month were you born in?");
    var myDay = prompt("What day were you born on?");
    var myYear = prompt("What year were you born in?");



    // var birthday = new Date(myYear, myMonth, myDay);

    // this change will make it work perfectly fine
    var birthd = myYear + " " + myMonth + " " + myDay;

    var birthday = new Date(birthd);

    var dateLoc = document.getElementById("dateField").innerHTML = "Today is " + today;

    var birthField = document.getElementById("birthField")
        .innerHTML = "I was born on " + monthNames[myMonth - 1] + ' ' + myDay + ', ' + myYear + '.' +
        '(' + myMonth + '/' + myDay + '/' + myYear + ')';

    var milliseconds, seconds, minutes, hours, days;

    var years = today.getFullYear() - birthday.getFullYear();

    myMonth--;
    var nextBirthday = (new Date(today.getFullYear(), myMonth, myDay)) < today ? (new Date(today.getFullYear() + 1, myMonth, myDay)) : (new Date(today.getFullYear(), myMonth, myDay))

    console.log(nextBirthday);

    var diff = nextBirthday - today;

    milliseconds = diff % 1000;
    diff = (diff - (milliseconds)) / 1000;

    seconds = diff % 60

    diff = (diff - seconds) / 60;

    minutes = diff % 60
    diff = (diff - minutes) / 60;

    hours = diff % 24
    days = (diff - hours) / 24;

    var nextBirth = document.getElementById("nextBirth").innerHTML = "I am " + years + "  Years old, and will turn " + (years + 1) + " in:" + "<br>" + days + " days, " + hours + " hours, " + minutes + " minutes, " + seconds + " seconds";


    var diffAlive = today - birthday;

    milliseconds = diffAlive % 1000;
    diffAlive = (diffAlive - (milliseconds)) / 1000;

    seconds = diffAlive % 60

    diffAlive = (diffAlive - seconds) / 60;

    minutes = diffAlive % 60
    diffAlive = (diffAlive - minutes) / 60;

    hours = diffAlive % 24
    days = (diffAlive - hours) / 24;


    var aliveFor = document.getElementById("aliveFor").innerHTML = "I have been alive for..." + "<br>" + days + " days, " + hours + " hours, " + minutes + " minutes, " + seconds + " seconds";
    </script>
</body>

</html>

计算时差是一项棘手的任务,因此您最好使用一些库,例如moment.js

要使用此库解决任务,您需要执行以下操作:

// Make two dates
var yearOfBirth = moment([2007, 0, 29]);
var now = moment();

// Calculate the difference in seconds
var difference = now.diff(yearOfBirth) 

// Make duration object
var duration = moment.duration(difference);

// Now you can format duration object as you want to, see the docs
alert(duration.years());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM