Нэн выпуск в IE 11

У меня есть следующий JavaScript -

datefrom = new Date(event.min);

                           if (datefrom != 'Invalid Date') {

                               var day = datefrom.getDate();
                               var month = datefrom.getMonth() + 1; //Months are zero based
                               var year = datefrom.getFullYear();
                               var hour = datefrom.getHours();
                               var min = datefrom.getMinutes();

                               if (day < 10)
                                   day = "0" + day;
                               if (month < 10)
                                   month = "0" + month;
                               if (hour < 10)
                                   hour = "0" + hour;
                               if (min < 10)
                                   min = "0" + min;

                               datefrom = day + "/" + month + "/" + year + " " + hour + ":" + min;


                               $("#DateBox1").val(datefrom);
                           }
                           else {
                               alert('IM HERE!!!');
                               $("#DateBox2").val(originalFrom);
                           }

При использовании приложения в Chrome и FireFox я могу успешно попасть в else Заявление и предупреждение "! М ЗДЕСЬ!!!" не беспокойтесь, так как datefrom является недействительной датой.

Однако IE заявляет, что дата от NaN и по какой-то причине я не могу войти в утверждение else.

Я поместил alrets в оператор if, чтобы увидеть, где я нахожусь при запуске, и по какой-то причине я просто не могу войти в else и установить правильное значение в IE. Почему это происходит???

3 ответа

Решение

Было бы полезно узнать, что представляет собой входное значение, но в целом вы должны знать, что существует ряд известных кросс-браузерных причуда при работе со встроенным Date объект. Строка, которая успешно проанализирована как дата в одном браузере, может не считаться действительной в другом браузере.

Во-вторых, тестирование на "Invalid Date" вероятно, не лучший способ определить, является ли дата действительной. Я бы предположил, что if(isNaN(datefrom.getDate())) вероятно, будет лучшим тестом.

Наконец, если вы анализируете строки дат, вы можете рассмотреть возможность использования одной из сторонних библиотек, доступных для упрощения работы с датами в JS. Посмотрите либо Date.js или Moment.js. Эти библиотеки обеспечат вам лучшую совместимость с различными браузерами, а также дополнительные функции, которых нет в стандартном объекте Date.

Используйте строку ниже, чтобы проверить правильную дату вместо datefrom != 'Invalid Date'

if(datefrom.getTime === "function" && isFinite(datefrom.getTime()))

Вы не указали, что event.min есть, поэтому нам остается размышлять о том, что может быть причиной ошибки.

Конструктор Date возвращает либо объект Date, либо NaNитак тест datefrom != 'Invalid Date' всегда должно быть правдой, как new Date(...) никогда не будет возвращать строку "Неверная дата", где реализация соответствует любой версии ECMAScript.

Если результат NaN, это означает, что конструктор не смог создать действительный объект даты из того, что ему было передано в соответствии с правилами в ECMA-262, что может означать, что это значение, которое при преобразовании в примитив:

  1. Строка, которая при разборе не приводит к правильной дате
  2. Число больше 8.64e15 и поэтому превышает допустимое значение для временного клипа

В первом случае есть много строк, которые могут быть успешно проанализированы некоторыми реализациями, но не другими. Есть также строки, которые могут быть успешно проанализированы (то есть привести к объекту Date) двумя реализациями, но привести к различным датам, например, 2014-03-24T20:20:00 будут обрабатываться (правильно) Chrome как UTC, но (неправильно) как местный Firefox.

Другие вопросы по тегам