簡體   English   中英

從月份號獲取天數

[英]Get number of days from month number

英國最大的JS新手嘗試在輸入中輸入1到12來獲得一個月中的日子。

有誰能告訴我我做錯了什么?

JS:

window.onload = funkytown;

var mnd = [[0, "Jan"], [1, "Feb"], [2, "Mar"], [3, "Apr"], [4, "Mai"], [5, "Jun"], [6, "Jul"], [7, "Aug"], [8, "Sep"], [9, "Okt"], [10, "Nov"], [11, "Des"]];

var days = [[0, 31], [1, 28], [2, 31], [3, 30], [4, 31], [5, 30], [6, 31], [7, 31], [8, 30], [9, 31], [10, 30], [11, 31]];

function funkytown() {  
    document.getElementById("button").onclick = calender;
}
function calender() {
    var tall = parseint(document.getElementById)("box").value;
    if(tall >= 1 && tall <= 12) {
        var mndminus = tall - 1;

        for(i = 0; i < mnd.length; i++) {
            if(mnd[i][0] == mndminus) {
                document.getElementById("text").innerHTML = mnd[i][1] + " - " + days[i][1];
            }
        }
    }
}

HTML:

<input type="number" id="box" max="12" />
<input type="button" id="button" value="Trykk" />
<span id="text"></span>

謝謝!

您只需替換此行:

var tall = parseint(document.getElementById)("box").value;

由:

var tall = parseInt(document.getElementById("box").value);

您在應該位於行尾的getElementById之后有parseint ,應該為parseInt)

希望這可以幫助。


 var mnd = [[0, "Jan"], [1, "Feb"], [2, "Mar"], [3, "Apr"], [4, "Mai"], [5, "Jun"], [6, "Jul"], [7, "Aug"], [8, "Sep"], [9, "Okt"], [10, "Nov"], [11, "Des"]]; var days = [[0, 31], [1, 28], [2, 31], [3, 30], [4, 31], [5, 30], [6, 31], [7, 31], [8, 30], [9, 31], [10, 30], [11, 31]]; function funkytown() { document.getElementById("button").onclick = calender; } function calender() { var tall = parseInt(document.getElementById("box").value); if(tall >= 1 && tall <= 12) { var mndminus = tall - 1; for(i = 0; i < mnd.length; i++) { if(mnd[i][0] == mndminus) { document.getElementById("text").innerHTML = mnd[i][1] + " - " + days[i][1]; } } } } funkytown(); 
 <input type="number" id="box" max="12" /> <input type="button" id="button" value="Trykk" /> <span id="text"></span> 

正如dandavis的評論所指出的那樣,由於leap年,2月並不總是有28天。 您最好創建一個函數來計算一個月中有多少天。 幸運的是,有一種使用JavaScript的相對簡單的方法。 如果使用Date構造函數Date.prototype.setDate日期設置為0 ,則生成的Date對象將設置為上個月的最后一天,使用此方法,我們可以輕松地創建一個函數來獲取一個月。

function getDaysInMonth(month) {
  var d = new Date();
  d.setMonth(month + 1);
  d.setDate(0);
  return d.getDate();
}

該函數希望monthDate構造函數一樣從零開始(意味着它希望month是介於011之間而不是112之間的數字)。

  var days = getDaysInMonth(mndminus);

我還建議使用其他數據結構查找月份名稱。 與其遍歷兩個元素的數組,不如使用對象作為字典。

var monthLookup = {
  0: "Jan",
  1: "Feb",
  2: "Mar",
  3: "Apr",
  4: "Mai",
  5: "Jun",
  6: "Jul",
  7: "Aug",
  8: "Sep",
  9: "Okt",
  10: "Nov",
  11: "Des"
};

然后,查找month就像monthLookup[mndminus]一樣容易。

經過這些更改,您的代碼將如下所示:

var getDaysInMonth = function (month) {
    var d = new Date();
    d.setMonth(month + 1);
    d.setDate(0);
    return d.getDate();
  },
  monthLookup = {
    0: "Jan",
    1: "Feb",
    2: "Mar",
    3: "Apr",
    4: "Mai",
    5: "Jun",
    6: "Jul",
    7: "Aug",
    8: "Sep",
    9: "Okt",
    10: "Nov",
    11: "Des"
  },
  calender = function () {
    var tall = parseInt(document.getElementById("box").value, 10),
      mndminus;

    if (tall >= 1 && tall <= 12) {
      mndminus = tall - 1;
      document.getElementById("text").innerHTML = monthLookup[mndminus] + " - " + getDaysInMonth(mndminus);
    }
  },
  funkytown = function () {
    document.getElementById("button").onclick = calender;
  };

window.onload = funkytown;

您會注意到,我使用了函數聲明而不是函數語句。 本文很好地解釋了它們分別是什么,以及為什么使用聲明而不是語句通常是一個好習慣。

需要注意的事情,請記住始終聲明變量! 您的原始代碼未聲明i ,這使其成為隱式全局變量。 隱式全局變量可能導致各種奇怪的錯誤,尤其是如果它是一個像i這樣的通用變量名,則很可能會在代碼的其他地方使用它。 同樣,如果您使用循環來搜索數組,則在找到要查找的項后,可以使用break語句提前退出循環。 如果沒有break; 語句,無論您搜索的是哪個月份(即使是一月並在第一次迭代中找到),您的代碼都會測試數組中的所有十二個項目。

我還建議學習使用JSHintJSLint的 ,他們是偉大的工具來幫助你改善你的代碼。 它們特別擅長發現諸如隱式全局變量之類的常見錯誤,並且可以通過在它們使您發狂之前指出這些問題來節省您大量的調試時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM