alert(new Date('2010-11-29'));
chrome, ff не имеет проблем с этим, но сафари выкрикивает «недопустимая дата». Зачем ?
edit: хорошо, согласно комментариям ниже, я использовал разбор строк и попробовал это:
alert(new Date('11-29-2010')); //doesn't work in safari
alert(new Date('29-11-2010')); //doesn't work in safari
alert(new Date('2010-29-11')); //doesn't work in safari
edit 22 марта 2018 : Похоже, что люди все еще приземляются здесь - Сегодня я бы использовал moment
или date-fns
и покончим с этим. Date-fns также очень безболезненный и легкий.
javascript
date
safari
Shrinath
источник
источник
Ответы:
Шаблон
yyyy-MM-dd
не является официально поддерживаемым форматом дляDate
конструктора. Firefox, кажется, поддерживает это, но не рассчитывайте на то, что другие браузеры будут делать то же самое.Вот некоторые поддерживаемые строки:
DateJS кажется хорошей библиотекой для анализа нестандартных форматов даты.
Изменить : только что проверил стандарт ECMA-262 . Цитата из раздела 15.9.1.15:
Дата Время Формат строки
Итак, похоже, что YYYY-MM-DD включен в стандарт, но по некоторым причинам Safari его не поддерживает.
Обновление : после просмотра документации datejs и ее использования, ваша проблема должна быть решена с помощью следующего кода:
источник
Для меня реализация новой библиотеки только потому, что Safari не может сделать это правильно, - это слишком много, и регулярное выражение является излишним. Вот Oneliner :
источник
Я столкнулся с аналогичной проблемой.
Date.Parse("DATESTRING")
работал на Chrome (версия 59.0.3071.115), но не на Safari (версия 10.1.1 (11603.2.5))Сафари:
Хром:
Решение, которое работало для меня, состояло в замене пространства в dateString на
"T"
. (Пример:dateString.replace(/ /g,"T")
)Сафари:
Хром:
Обратите внимание, что ответ от браузера Safari на 8 часов (28800000 мс) меньше, чем ответ браузера Chrome, потому что Safari возвратил ответ в локальной TZ (что на 8 часов позже UTC)
Чтобы получить оба раза в одном и том же TZ
Сафари:
Хром:
источник
new Date(year, month, date, hours, minutes, seconds, milliseconds)
конструктор. Разобрать строковую дату в массиве ее компонентов, чтобы использовать эти компоненты в конструкторе. @nizantz было бы здорово, если вы думаете, что такой пример может быть добавлен к вашему ответу.dateString.replace(/ /g,"T")
волшебная строка кода работала от меня. :)Я использую момент, чтобы решить проблему. Например
источник
Чтобы решение работало в большинстве браузеров, вы должны создать объект date с этим форматом.
например:
отлично работает с IE, FF, Chrome и Safari. Даже более старые версии.
IE Dev Center: объект Date (JavaScript)
Сеть разработчиков Mozilla: Дата
источник
преобразовать строку в дату от fromat (вы должны знать часовой пояс сервера)
где +08: 00 = часовой пояс с сервера
источник
У меня была та же проблема. Затем я использовал момент. JS. Проблема исчезла.
например
источник
Хотя вы можете надеяться, что браузеры будут поддерживать ISO 8601 (или только его подмножества дат), это не так. Все известные мне браузеры (по крайней мере, в тех регионах США / Англии, которые я использую) способны анализировать ужасный
MM/DD/YYYY
формат США .Если у вас уже есть части даты, вы можете вместо этого попробовать использовать Date.UTC () . Если нет, но вы должны использовать
YYYY-MM-DD
формат, я предлагаю использовать регулярное выражение, чтобы проанализировать известные вам фрагменты, а затем передать ихDate.UTC()
.источник
Используйте приведенный ниже формат, он будет работать на всех браузерах
// Ваш вывод будет выглядеть так: «Ср 23 марта 2016 00:00:00 GMT + 0530 (IST)»
// Обратите внимание, что это будет в текущем часовом поясе, в данном случае, обозначенном IST, чтобы преобразовать в часовой пояс UTC, который вы можете включить
// Ваш вывод будет выглядеть так: «Вт, 22 марта 2016 г., 18:30:00 по Гринвичу»
Обратите внимание, что теперь dateObj показывает время в формате GMT, также обратите внимание, что дата и время были изменены соответственно.
Функция «toUTCSting» извлекает соответствующее время на гринвичском меридиане. Это достигается путем установления разницы во времени между вашим текущим часовым поясом и часовым поясом Гринвичского меридиана.
В приведенном выше случае время до преобразования составляло 00:00 часов и минут 23 марта 2016 года. А после преобразования из GMT + 0530 (IST) часов в GMT (в основном это вычитает 5,30 часов из данной отметки времени в этом случай) время отражает 18.30 часов 22 марта 2016 года (ровно 5.30 часов после первого раза).
Далее для преобразования любого объекта даты в метку времени вы можете использовать
// вывод будет выглядеть примерно так: "1458671400000"
Это даст вам уникальную метку времени
источник
Как насчет угона
Date
с фиксированной датой ? Без зависимостей, min + gzip = 280 Bисточник
Лучший способ сделать это - использовать следующий формат:
Это поддерживается во всех браузерах и не доставит вам никаких проблем. Обратите внимание, что месяцы написаны от 0 до 11.
источник
Та же самая проблема, с которой сталкиваются в Safari, и была решена путем вставки этого в веб-страницу
Надеюсь, это будет работать и ваш случай тоже
Спасибо
источник
Как ранее упоминалось @nizantz, использование Date.parse () не помогло мне в Safari. После небольшого исследования я узнал, что свойство lastDateModified для объекта File устарело и больше не поддерживается Safari. Использование свойства lastModified объекта File решило мои проблемы. Конечно, не нравится, когда плохая информация найдена в Интернете.
Спасибо всем, кто внес вклад в этот пост, который помог мне пойти по пути, который мне нужен, чтобы узнать о моей проблеме. Если бы не эта информация, я бы, наверное, не разобрался в своей основной проблеме. Может быть, это поможет кому-то еще в моей аналогичной ситуации.
источник
Я также сталкиваюсь с той же проблемой в браузере Safari
Вот решение:
источник
Это не лучшее решение, хотя я просто улавливаю ошибку и возвращаю текущую дату. Лично я чувствую, что не решаю проблемы Safari, если пользователи хотят использовать ненадлежащий браузер, не соответствующий стандартам, - они вынуждены жить с причудами.
Я бы посоветовал, чтобы ваш сервер отправлял даты ISO.
источник
используйте формат «мм / дд / гггг». Например: - новая дата ('02 / 28/2015 '). Хорошо работает во всех браузерах.
источник