获取月份编号的天数

时间:2015-09-23 21:42:07

标签: javascript arrays input

英国最大的JS noob试图在一个月内输入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>

谢谢!

2 个答案:

答案 0 :(得分:1)

您只需要替换此行:

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

通过:

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

parseint parseInt)之后的getElementById应该在行尾。{/ p>

希望这有帮助。

&#13;
&#13;
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();
&#13;
<input type="number" id="box" max="12" />
<input type="button" id="button" value="Trykk" />
<span id="text"></span>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

正如dandavis的评论所指出的那样 由于闰年,二月并不总是有28天。你会好起来的 创建一个函数来计算一个月中的天数。幸运的是, 使用JavaScript有一种相对简单的方法。如果您设置日期 使用Date constructor0 要么 Date.prototype.setDate, 生成的Date对象将设置为上个月的最后一天, 使用此功能,我们可以轻松创建一个函数来获取一个月内的天数。

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

此函数期望monthDate构造函数一样从零开始 (意味着它希望month011之间的数字,而不是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"
};

然后查看月份就像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;

您会注意到我使用了函数声明而不是函数声明。 This article 能很好地解释每一个是什么以及为什么它通常都是好的 练习使用声明而不是语句。

要注意的事情,记得要经常声明你的变量! 您的原始代码未声明i,这使其成为隐式全局代码。 隐式全局变量可能会导致各种奇怪的错误,特别是如果它是常见的 像i这样的变量名可能会在代码的其他地方使用。也, 如果您使用循环搜索数组,则可以使用break statement 一旦找到了您正在寻找的项目,就提前退出循环。没有 一个break;语句,您的代码无论如何都会测试数组中的所有12个项目 您正在寻找的月份,即使它是1月份,也可以在第一个月找到 迭代。

我还建议学习使用JSHintJSLint,它们是帮助您改进代码的绝佳工具。他们特别擅长发现像隐式全局变量这样的常见错误,并且会在你疯狂之前将这些事情指出来之前为你节省大量的时间。