новый Date () с использованием Javascript в Safari - PullRequest
10 голосов
/ 07 января 2011

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

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

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

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

Ответы [ 4 ]

41 голосов
/ 07 января 2011

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

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

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 = январь, 1 = февраль, ... 11 = декабрь) .

2 голосов
/ 15 апреля 2014

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

затем var date = Date.parse ('1970-01-12 00:00:00');var formattedDate = date.toString ('гггг-ММ-дд');

1 голос
/ 15 мая 2011

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

0 голосов
/ 26 июля 2012

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

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

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