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.