Javascript пока не работает в Safari

1

Я пытаюсь создать календарь, и я попробовал ниже.

function displayCalendar() {

    var dateNow = new Date();
    var month = dateNow.getMonth();

     var counter = 1;

     var nextMonth = month + 1;
     var prevMonth = month -1;
     var day = dateNow.getDate();
     var year = dateNow.getFullYear();


     var dayPerMonth = ["31","28","31","30","31","30","31","31","30","31","30","31"]


     // days in previous month and next one , and day of week.
     var nextDate = new Date(nextMonth +' 1 ,'+year);
     var weekdays = nextDate.getDay();
     var numOfDays = dayPerMonth[month];
     var ul = document.getElementById('dates');
     var monthInt = month + 1;
     var currentMonth = document.getElementById('currentMonth');

     monthInt.toString().length === 1 ? currentMonth.innerHTML = "0" + monthInt : currentMonth.innerHTML = monthInt;

// add empty li
   while (weekdays > 0) {

     var li = document.createElement('li');
     ul.appendChild(li);

       weekdays--;

   }


 while (counter <= numOfDays) {

  var li = document.createElement('li');
  li.innerHTML = counter;
  ul.appendChild(li);


  counter++;

 }

}

Он отлично работает, но когда я меняю месяц на август, как этот var month = dateNow.getMonth() + 1; первая дата начинается в воскресенье. Он должен начаться в среду.

Я думаю, что этот код не работает

while (weekdays > 0) {

         var li = document.createElement('li');
         ul.appendChild(li);

           weekdays--;

   } 

В хроме это работает и начинается в среду правильно. Кто-нибудь знает, почему он не работает? Заранее спасибо!

Теги:
safari

3 ответа

1

Я думаю, проблема заключается в том, что при вычислении nextMonth для ввода вашей строки вы принимаете месяцы в датах в js, начиная с 1. Но они начинаются с 0. Таким образом, ваша дата теперь получает месяц, давая вам 6, а не 7, и когда вы добавляете 1 вы получаете 7, а не 8. Добавьте 2, и вы получите среду, как хотите. В частности, вам нужно var nextMonth = month + 2; Я тестировал это в Firefox. Я согласен с другим опубликованным ответом о том, что я не люблю формат даты. Кроме того, вы не используете prevMonth. Вы должны удалить его. Или, если вам это нужно, у него не должно быть -1. Наконец, вы захотите вернуться к своему индексу в массив daysPerMonth. Если вы хотите количество дней в следующем месяце, оно отключено.

  • 0
    Оказывается, я неправильно понял вопрос. Я оставлю ответ на случай, если он будет полезен для некоторых.
1

Я думаю, что проблема заключается в вашем формате даты. Chrome является более щедрым в разборе даты, которую вы даете ему, которая представляет собой строку, которая выглядит как "7 1,2018". Chrome принимает это как действительную дату, Safari этого не делает. Если вы убедитесь, что вы поместили сокращения между месяцем, датой и годом, например "7/1/2018" это будет работать лучше.

0

Как сказал kshetline, проблема была в формате даты. Изменен этот код

var nextDate = new Date(nextMonth +' 1 ,'+year); var weekdays = nextDate.getDay();

в

var nextDate = new Date(year, month, 1);
var weekdays = nextDate.getDay();

тогда это сработало отлично!

  • 0
    Я только что попробовал это на Chrome и Firefox в javascript.cs.lmu.edu/runner и поместил alert (nextDate) сразу после строки NextDate =, которую вы здесь установили [я удалил окно и html-код]. Оба показывают 1 июля. Это делает что-то другое для вас?
  • 0
    Я думаю, что 1 июля правильно, потому что месяц 6, что означает июль, верно?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню