2017-10-13 23 views
0

在我的javascript程序中,我正在計算出生年份。我創建了接受不同值的提示對話框,我正在顯示這些值,但用戶給出的月份值在第二行中顯示不正確。用戶已輸入8,並顯示10月。任何人都可以幫助我找出問題嗎?我應該如何從提示中計算出所有三個數值以計算出生年份?如何使用Date對象從提示中獲取月份名稱,然後計算下一個生日

代碼:

var today = new Date(); 
 

 
var monthNames = ["January", "February", "March", "April", "May", "June", 
 
    "July", "August", "September", "October", "November", "December" 
 
]; 
 

 
var birth = 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 days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; 
 
var dateLoc = document.getElementById("dateField").innerHTML = "Today is " + today; 
 

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

 

 
var secondsBetween = (endDate.getTime() - startDate.getTime())/1000 
 
endDate = new Date(today.getFullYear() + 1, myMonth, myDay); 
 
var nextBirth = document.getElementById("nextBirth").innerHTML = "I am" + endDate + "Years old, and will turn"+ +"in" ;
<p id="dateField"> </p> 
 
<p id="birthField"> </p> 
 
<p id="nextBirth"> </p>

輸出:

enter image description here

+2

您使用'monthNames [birth.getMonth()]'顯示月份名稱,但'birth.getMonth()'與用戶輸入的月份沒有關係。 – nnnnnn

+0

它是當前月份爲'new Date();'用實際日期創建一個日期對象。你需要類似'birth = new Date(myYear,myMonth,myDay)' – Eineki

回答

2

的問題是,birth.getMonth()只是返回當前個月,爲birth被簡單地設置new Date()。因爲現在是十月份,所以你總會得到October

相反,您正在尋找訪問用戶提供的索引monthNames[myMonth - 1]。減去1是必要的,因爲索引從零開始,而月份從一開始。要有正確的月份顯示出來,只需在下面的例子中輸入月份號碼:

var today = new Date(); 
 

 
var monthNames = ["January", "February", "March", "April", "May", "June", 
 
    "July", "August", "September", "October", "November", "December" 
 
]; 
 

 
var birth = 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 days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; 
 
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 + ')';
p { 
 
    text-align: center; 
 
    font-family: monospace; 
 
    font-size: 20px; 
 
}
<p id="dateField"> </p> 
 
<p id="birthField"> </p> 
 
<p id="nextBirth"> </p>

希望這有助於! :)

+0

謝謝你....我試圖計算代碼中顯示的出生年份,但它不起作用。你能否建議我解決方案? – pari

+0

這是[** XY問題**](https:// meta。stackexchange.com/a/66378);與你最初要求的不同。將這兩個問題結合起來會使其**太寬泛**,並且意味着這個問題將被視爲'[** off-topic **](http://stackoverflow.com/help/dont-ask)'爲堆棧溢出。請把每一點都分解成一個具體的行動,並且要求每個人都成爲新的個人問題。你可以在新問題中用[**這個鏈接**](https://stackoverflow.com/questions/46721303)鏈接到這個問題,如果它有助於解釋你的觀點:) –

+0

@年齡我可以完全問一個新問題嗎?與此計劃有關? – pari

3

您有monthNames[birth.getMonth()]問題,請嘗試monthNames[myMonth - 1]代替:

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

十月是當前月份的名字,它是如此,由於birth = new Date()

你的下一個生日可以通過(myMonth - 1)獲得/ myDay /(今年+ 1)。然後計算兩個日期之間的秒數,您可以使用

var secondsBetween = (endDate.getTime() - startDate.getTime())/1000 

這意味着您必須將輸入日期轉換爲javascript日期。在你的情況(只是以下specification)這是很簡單的:

endDate = new Date(today.getFullYear() + 1, myMonth - 1, myDay); 
+0

謝謝................. – pari

+0

哦,是的,這是我的錯誤,我錯誤地扣除了 – pari

+0

我有還有一個疑問。我應該如何計算出生年,日,小時,分鐘和秒到下一個生日?由於我們無法直接給出日期,因此取決於用戶。那我該怎麼辦? – pari

相關問題