Получение дней в месяце с использованием JavaScript: выпуск - PullRequest
1 голос
/ 17 января 2012

Я пытаюсь получить дни месяца, используя JavaScript, и столкнулся с проблемой.В настоящее время я использую решение, упомянутое здесь .

Вот мой код:

 function getDays(month,year){

    if(month=="" || year==""|| year=="--Select--"){

        document. getElementById("days"). innerHTML ="";
        return;
    }

    var months= new Array();
    alert("Month in Function"+month);// To test.
    alert("Year in function"+year);
    months[0]="January";
    months[1]="February";
    months[2]="March";
    months[3]="April";
    months[4]="May";
    months[5]="June";
    months[6]="July";
    months[7]="August";
    months[8]="September";
    months[9]="October";
    months[10]="November";
    months[11]="December";
    var index=months.indexOf(month);
    alert("Index used"+index);
      var datebase = new Date(year,index,1); //nb: month = zerobased
      datebase.setDate(datebase.getDate()-1);

            // Also tried database=new Date(year, index, 0).getDate();


    document.getElementById("days").innerHTML =datebase.getDate();// This value is skewed.

}

Я получаю странные значения для дней месяца, например, апрель 2012 г.дает мне 31 день, а март 2011 дает мне 28 дней.Любая помощь в том, что я мог испортить здесь, была бы полезна.

Ответы [ 2 ]

2 голосов
/ 17 января 2012

Вы строите дату, используя new Date(year,index,1), которая дает, например, 1 марта, если вы передаете "March".Затем вы вычитаете один день, чтобы получить 28 февраля.Тогда вы говорите, что марта имеет 28 дней.Очевидно, это неправильный вывод.

Вам нужно построить, используя:

new Date(year, index + 1, 1);
// so, build e.g. 1 April when "March" is passed, then
// subtract one to get last day of March
1 голос
/ 17 января 2012

Несколько месяцев назад я должен был сделать то же самое - получить количество дней, которое месяц имеет в данном году.Есть много решений, но это, я думаю, самое короткое и хорошее.

 function DaysInMonth(Month,Year){
     return (32-new Date(Year,Month,32).getDate());     
 }

Функция имеет два параметра:

  1. Месяц - это целое числозначение от 0 до 11, где 0 обозначает январь, а 11 - декабрь
  2. Год - год

Попробуйте:

  DaysInMonth(1,2012)
  DaysInMonth(2,2012)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...