Javascript Date (dateString) возвращает NaN на конкретном сервере и в браузере - PullRequest
8 голосов
/ 11 ноября 2011

Я использую конструктор Javascript Date (string) с форматом даты «гггг-мм-дд». Конструктор прекрасно работает в IE 9 и Firefox, если только приложение не запущено на нашей тестовой виртуальной машине с IIS. Если он находится на виртуальной машине, в IE 9 он возвращает «NaN», но в Firefox все еще работает нормально.

    var dateAsString = "2011-11-09";
    var dateCreated = new Date(dateAsString);

Я предполагал, что сервер не имеет ничего общего с клиентским Javascript. Есть предложения?

Ответы [ 4 ]

9 голосов
/ 20 июня 2012

А для тех из нас, кто хочет знать , как заменить дефисы (или тире) на косые черты:

new Date(dashToSlash(string));

Использует эту функцию:

function dashToSlash(string){
  var response = string.replace(/-/g,"/");
  //The slash-g bit says: do this more than once
  return response;
}

В моем случае гораздо проще выборочно преобразовывать дефисы в косые черты (только там, где это необходимо для функции Date ()), чем заменять формат даты везде в моем коде.

Примечание: вам действительно нужно определитьотдельную переменную «response» и присвойте ей значение результата операции замены.Если вы этого не сделаете, строка возвращается в Chrome без изменений.Это не большая проблема, так как в Chrome нет проблем со строками переносов.Но все же ...

8 голосов
/ 12 ноября 2011

Просто используйте косую черту вместо дефисов, если можете.


РЕДАКТИРОВАТЬ: Расширенное уточнение ...

Стандартный формат ISO 8601 использует дефис какразделитель даты.Мой ответ не означает, что вам не нужно следовать стандартам.При необходимости вы можете использовать косые черты только для конструктора Date.

3 голосов
/ 11 ноября 2011

Это из-за формата даты.По какой-то причине IE и Safari отключились с yyyy-mm-dd.Используйте другой формат даты, и вы должны быть все в порядке.

Здесь говорится о:http://biostall.com/javascript-new-date-returning-nan-in-ie-or-invalid-date-in-safari

2 голосов
/ 11 ноября 2011

Я предлагаю попробовать более надежную форму анализа даты. В приведенном ниже примере используется setFullYear(). IE дает другой результат с кодом ниже?

/**Parses string formatted as YYYY-MM-DD to a Date object.
   * If the supplied string does not match the format, an 
   * invalid Date (value NaN) is returned.
   * @param {string} dateStringInRange format YYYY-MM-DD, with year in
   * range of 0000-9999, inclusive.
   * @return {Date} Date object representing the string.
   */
  function parseISO8601(dateStringInRange) {
    var isoExp = /^\s*(\d{4})-(\d\d)-(\d\d)\s*$/,
        date = new Date(NaN), month,
        parts = isoExp.exec(dateStringInRange);

    if(parts) {
      month = +parts[2];
      date.setFullYear(parts[1], month - 1, parts[3]);
      if(month != date.getMonth() + 1) {
        date.setTime(NaN);
      }
    }
    return date;
  }

Источник: http://jibbering.com/faq/#parseDate

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