2017-10-16 90 views
0

在我的程序中,通過提示值我計算出生年份,下一個轉折年份,日,小時,分鐘和秒。現在我想計算一下,從出生那天起,這個人還活着多久。爲此,我做了下面的計算,但我的計算多少天,幾小時,幾分鐘,幾秒鐘一直活着顯示不正確。誰能幫忙?Javascript:計算從出生到今天的天數,小時數,分鐘數,秒數

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

enter image description here

+5

令人印象深刻的編碼爲一歲 – charlietfl

回答

1

你錯了一個月傳遞給Date構造。它是基於0的。

myMonth--行移動到設置生日變量之前。

例如

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

如果通過生日變量爲11月的提示輸入了「10月」,則您的「var生日」是在一個月前計算的示例。所以請參考下面的代碼片段與工作變化。希望這有助於:)

<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> 
1

計算時間差是一項棘手的任務,所以你最好使用一些圖書館,像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()); 
+0

我想計算沒有libr元。 – pari

相關問題