Нэн выпуск в 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, что может означать, что это значение, которое при преобразовании в примитив:
- Строка, которая при разборе не приводит к правильной дате
- Число больше 8.64e15 и поэтому превышает допустимое значение для временного клипа
В первом случае есть много строк, которые могут быть успешно проанализированы некоторыми реализациями, но не другими. Есть также строки, которые могут быть успешно проанализированы (то есть привести к объекту Date) двумя реализациями, но привести к различным датам, например, 2014-03-24T20:20:00 будут обрабатываться (правильно) Chrome как UTC, но (неправильно) как местный Firefox.