На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Проблема с датами на JavaScript в айфоне, сафари и IE


Я не так уж часто проверяю свою работу по созданию сайтов, верстке, написанию скриптов для сайтов в разных браузерах. В основном я тестирую в хроме, реже – опере и рыжем лисе. И привык, что если работает в них, то запустится на большинстве устройств и браузеров. Однако, это не всегда так, и иногда можно столкнуться с проблемами работы JavaScript на, казалось бы, ровном месте.

Например, так случилось в одном из последних заказов. Я сделал калькулятор на JavaScript - обычная работа, что там может быть такого? А вот может быть! Мой калькулятор напрочь отказывался работать в мобильной версии на айфоне, на маке в сафари и на IE. Причем код рабочий, там хоть и много строк, но особо нечему было ломаться.

В чем же проблема?

Начинаем копать. Первым делом я подумал о событии onchage – именно с помощью него вешается функция JS на событие. Однако, onchage отрабатывал корректно. Что ж, начинаем, вздохнув, искать ошибку в коде. Качаем браузер сафари, устанавливаем его, переходим в меню «Разработка» -> «Показать консоль ошибок». И … и не видим никакой ошибки. То есть код выполняется, но результатов не приносит. Снова вздыхаем, и начинаем что-то похожее на отладку.

Смотрим, на каких этапах и какие у нас задействуются переменные, почему они не вычисляются. Для этого вставляем алетры начиная с самого начала. И практически сразу находим кое-что интересное:



Invalid Date – с какого такого интересно перепугу? Вот участок кода:

var d = new Date(); 
var curr_month = d.getMonth() + 1;  
var curr_year = d.getFullYear(); 
var curr_date = new Date(curr_year + "-" + curr_month); 
alert (curr_date);
Начинаем копать спецификацию. Оказывается, сафари и IE не поддерживают некоторые паттерны (форматы) дат. У нас тут получается yyyy-MM, а такого в них нет. Не вшито, так сказать.

Что делать?

На самом деле в моем конкретном случае ничего сложного. Меняем строку с форматом даты на такой:

var curr_date = new Date(curr_year + "/" + curr_month+ "/01");
И все отлично работает:



Но что если бы у меня были не десятки, а сотни или тысячи строк кода? С дальнейшим изменением?

Вывод

А вывод прост. Либо перед релизом проверяем код (страницу) на всех основных браузерах, либо перед началом разработки внимательно читаем стандарты по работе с датами на JS - ECMA-262.

Если у вас есть проблемы в работе скриптов на сайте или же нужно расширить имеющийся функционал, то вы всегда можете написать мне. Я решу любую проблему на сайтах с HTML, CSS, PHP, JS за умеренные деньги. Быстро.



Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.



тегизаметки, java script, даты, стандарты, решение проблем





Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Кодирование и декодирование base64 на Java 8
Урок 7. Булевы и условные операторы Java


© upread.ru 2013-2020
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.