New Date() с использованием Javascript в Safari

У меня возникла проблема с использованием новой функции Date() в Javascript. Safari сообщает мне сообщение "Недействительная дата".

Я создал короткий пример в jsbin.

Это похоже на работу со всеми другими браузерами, но не с Safari. Любые идеи о том, как я могу принять значение из ввода (например, 2011-01-03) и превратить его в объект даты, когда он работает правильно в Safari?

Большое спасибо!

Ответ 1

Синтаксический анализ даты на JavaScript зависит от реализации, формат ISO8601 был недавно добавлен в спецификацию ECMAScript 5th Edition, но это все еще не поддерживается всеми реализациями.

Я бы рекомендовал вам разобрать его вручную, например:

function parseDate(input) {
  var parts = input.match(/(\d+)/g);
  return new Date(parts[0], parts[1]-1, parts[2]);
}

parseDate('2011-01-03'); // Mon Jan 03 2011 00:00:00

В основном вышеприведенная функция соответствует каждой дате и использует конструктор Date, чтобы построить объект даты, обратите внимание, что аргумент months должен быть 0 (0 = Jan, 1 = Feb,... 11 = Dec).

Ответ 2

Простое решение, которое я пробовал Загрузить date.js из http://datejs.com/ Включить в свой файл

то  var date = Date.parse('1970-01-12 00:00:00');  var formattedDate = date.toString('yyyy-MM-dd');

Ответ 3

Хотя решение @CMS, вероятно, превосходит, я обнаружил, что использование Date.parse('2011-01-13') также является быстрым рабочим решением.

Ответ 4

csnover имеет некоторый прогрессивный код улучшения кода ISO 8601, доступный на GitHub: https://github.com/csnover/js-iso8601/blob/master/iso8601.js

В том числе его код должен содержать временное исправление, в то время как команда Safari работает над более полной реализацией ES5.