Internet explorer формат даты
Наилучшим форматом строки для разбора строки является формат ISO даты вместе с конструктором объекта JavaScript Date.
Примеры формата ISO: YYYY-MM-DD или YYYY-MM-DDTHH:MM:SS .
Но подождите! Использование «формата ISO» само по себе не работает надежно. Строка иногда анализируется как UTC, а иногда как локальное время (в зависимости от поставщика и версии браузера). Лучше всего всегда хранить даты в формате UTC и производить вычисления в формате UTC.
Чтобы проанализировать дату как UTC, добавьте Z - например: new Date('2011-04-11T10:20:30Z') .
Чтобы отобразить дату в формате UTC, используйте .toUTCString() ,
чтобы отобразить дату по местному времени пользователя, используйте .toString() .
Для старой совместимости с Internet Explorer (версии IE менее 9 не поддерживают формат ISO в конструкторе Date), вы должны разделить строковое представление datetime на его части, а затем вы можете использовать конструктор, используя части datetime, например: new Date('2011', '04' - 1, '11', '11', '51', '00') . Обратите внимание, что число месяца должно быть на 1 меньше.
Альтернативный метод - используйте соответствующую библиотеку:
Вы также можете воспользоваться библиотекой Moment.js, которая позволяет анализировать дату с указанным часовым поясом.
Date.parse почти получает то, что вы хотите. Он задыхается в части am / pm , но с некоторыми взломами вы можете заставить его работать:
new Date(2000, 10, 1) сообщит вам "Ср 01 Ноя 2000 00:00:00 GMT + 0100 (CET)"
Смотрите, что 0 за месяц дает вам январь
Если вам нужно проверить содержимое строки перед преобразованием в формат даты:
Я сделал эту функцию для преобразования любого объекта Date в объект UTC Date.
Передайте это как аргумент Date ():
Вы можете получить доступ к дате, месяцу и году, используя, например: dt.getMonth() .
Этот ответ основан на ответе Kassem, но также содержит двузначные годы. Я внес изменение в ответ Кассема, но в случае, если оно не было одобрено, я также отправляю его как отдельный ответ.
Для тех, кто ищет крошечное и умное решение:
Еще один способ сделать это:
Строки даты в соответствии с ISO 8601, как и стандарт, все еще не получили широкого распространения.
Это отличный ресурс, чтобы выяснить, какой формат строки даты вы должны использовать:
Да, это означает, что ваша строка даты может быть такой же простой, как и
вопрос, Можно ли изменить его формат на что-то вроде: DD-MM-YYYY ?
невозможно изменить формат
мы должны различать формат over the wire и формат презентации браузера.
провод формате на HTML5 дата ввода спецификация относится к спецификация RFC3339, который задает формат полной даты, равный: гггг-ММ-ДД. См.5.6 спецификации RFC3339 для больше подробности.
презентация в формате браузеры не ограничены в том, как они представляют дату ввода. На момент написания Chrome, Edge, Firefox и Opera имеют поддержку даты (см. здесь). Все они отображают средство выбора даты и форматируют текст в поле ввода.
форматирование текста поля ввода выполняется правильно только в Chrome. Edge, Firefox и Opera отображают дату с днем, месяцем и годом в правильном порядке для локали, но непоследовательно используйте косые черты ( 30/01/2018 ), где например тире ( 30-01-2018 ) ожидаются в формате календаря локали.
Internet Explorer 9, 10 и 11 отображает текстовое поле ввода с проводным форматом.
С тех пор, как этот вопрос был задан, в веб-сфере произошло довольно много событий, и одним из самых захватывающих является посадка веб-компоненты. Теперь вы можете решить эту проблему элегантно с помощью a таможни в HTML5 элемент конструированный для того чтобы одеть ваши потребности. Если вы хотите переопределить/изменить работу любого тега html просто создайте свою игру с shadow dom.
вы можете начать с простого (и рабочее) решение, как datetime-input для полимера, который позволяет использовать тег, как этот:
или вы можете получить творческие и всплывающие полные даты-подборщики стиль, как вы хотите, с форматированием и локали вы хотите, обратные вызовы, и ваш длинный список вариантов (у вас есть целый пользовательский API в вашем распоряжении!)
стандарты-совместимые, без хаков.
проверьте доступные polyfills, что браузеры/версии Они поддерживают, и если он охватывает достаточно % вашей пользовательской базы. это 2018, так что, скорее всего, он будет охватывать большинство ваших пользователей.
надеюсь, что это помогает!
Как уже упоминалось ранее, официально изменить формат невозможно. Однако поле можно стилизовать, поэтому (с небольшой помощью JS) оно отображает дату в желаемом формате. Некоторые из возможностей манипулировать вводом даты теряются таким образом, но если желание форсировать формат больше, это решение может быть способом. Поля даты остаются только такими:
он отлично работает на Chrome для рабочего стола и Safari на iOS (особенно желательно, так как собственные манипуляторы даты на сенсорных экранах непобедимы IMHO). Не проверял других, но не ожидайте сбоя на любом Webkit.
- RFC 3339 / ISO 8601 "формат провода": гггг-ММ-ДД. Согласно спецификации HTML5, это формат, который должен использоваться для значения ввода при отправке формы или при запросе через DOM API. Он не зависит от локали и региона.
- формат, отображаемый управлением пользовательского интерфейса и принятый в качестве пользовательского ввода. Поставщикам браузеров рекомендуется следовать указаниям пользователя выбор предпочтений. Например, в Mac OS с регионом "США", выбранным на панели "язык и текст", Chrome 20 использует формат "m/d/yy".
спецификация HTML5 не включает никаких средств переопределения или ручного указания любого формата.
Я считаю, что браузер будет использовать локальный формат даты. Не думай, что это возможно изменить. Конечно, вы можете использовать пользовательский выбор даты.
после многих препятствий, я придумал решение, которое позволяет изменять формат. Есть несколько предостережений, но он может использоваться, если вы хотите, чтобы " Jan " или " 01 " отображались последовательно. Это работает в Chrome на Windows и Mac только из-за того, что Firefox не поддерживает родной выбора даты вообще.
Google Chrome в своей последней бета-версии, наконец, использует ввод type=date формат DD-MM-YYYY .
таким образом, должен быть способ заставить определенный формат. Я разрабатываю веб-страницу HTML5, и поиск даты теперь терпит неудачу с разными форматами.
попробовать это, если вам нужно быстрый решение чтобы сделать гггг-ММ-ДД пойти "ДД-Сен -2016"
1) Создайте около вашего входного сигнала один класс пяди (подействуйте как ярлык)
2) Обновите метку каждый раз, когда ваша дата изменен пользователем, или когда необходимо загрузить данные.
работает для мобильных телефонов браузера webkit и указатель-события для IE11 + требует jQuery и jQuery Date
как сказал не полностью реализован в большинстве браузеров, поэтому давайте поговорим о webkit, как браузеры (chrome).
используя linux, вы можете изменить его, изменив переменную окружения LANG , LC_TIME кажется, не работает (для меня, по крайней мере).
вы можете locale в терминале, чтобы увидеть свои текущие значения. Я думаю, что та же концепция может быть применена к IOS.
дата показана как mm/dd/yyyy
дата отображается как dd/mm/yyyy
вы можете увидеть реальный текущий формат даты, используя date :
, а как LC_TIME и d_fmt кажется, отвергнут chrome (и я думаю, что это ошибка в webkit или chrome), к сожалению не работает. :'(
так, к сожалению, ответ, если LANG переменная окружения не решает вашу проблему, пока нет способа.
прочитав много обсуждений, я подготовил простое решение, но я не хочу использовать много Jquery и CSS, просто некоторый javascript.
Как я могу отформатировать объект даты JavaScript для печати как 10-Aug-2010 ?
внимание: есть лучшие ответы ниже. Этот ответ был написан в 2010 году, и с тех пор появились новые и лучшие решения. ОП должна принять другой ответ.
вы можете редактировать массив monthNames использовать Jan, Feb, Mar и т. д..
использовать toLocaleDateString();
на toLocaleDateString() метод возвращает строку с чувствительным к языку представлением части даты даты. Аргументы locales и options позволяют приложениям указывать язык, соглашения о форматировании которого должны использоваться, и настраивать поведение функции.
значения, которые вы можете передать в опции для разных ключей:
- день:
Представление дня.
Возможные значения: "числовые", "2-значные". - в будни:
Представление буднего дня.
Возможные значения - "узкий", "короткий", "длинный". - год:
Представление года.
Возможные значения: "числовые", "2-значные". - месяц:
Представление месяца.
Возможные значения: "числовой", "2-значный", "узкий", " короткий", "длинный." - час
Представление часа.
Возможные значения: "числовые", "2-значные". - минуту: Представление минуты.
Возможные значения: "числовые", "2-значные". - второй:
Представление второго.
Возможные значения-"числовые", 2-значные.
все эти ключи являются необязательными. Вы можете изменить количество значений параметров, основанных на ваших требованиях, и это также будет отражать наличие каждого срока даты.
Примечание: Если вы хотите только настроить параметры содержимого, но по-прежнему использовать текущую локаль, передавая null для первого параметра вызовет ошибку. Использовать undefined вместо.
на разных языках:
- "en-US": На Английском Языке
- "привет-в": для Хинди
- "ja-JP": Для Японцев
вы можете использовать дополнительные языковые параметры.
вы также можете использовать toLocaleString() способ для той же цели. Единственная разница в том, что эта функция предоставляет время, когда вы не проходите опции.
ссылки:
Если вам нужно быстро отформатировать дату с помощью простого JavaScript, используйте getDate , getMonth + 1 , getFullYear , getHours и getMinutes :
или, если вам нужно, чтобы он был дополнен нулями:
Ну, что я хотел, чтобы преобразовать текущую дату в в MySQL дружественная строка даты, такая как 2012-06-23, и использовать эту строку в качестве параметра в одном из моих запросов. Простое решение, которое я нашел, таково:
имейте в виду, что указанные выше решения не учитывать ваш часовой сдвиг.
вместо этого вы можете использовать эту функцию:
это даст вам правильную дату, если вы выполнение этого кода в начале / конце дня.
Если вы уже используя jQuery UI в вашем проекте вы можете сделать это следующим образом:
некоторые параметры формата даты datepicker для воспроизведения доступны здесь.
пользовательская функция форматирования:
для фиксированных форматов, простая функция делает работу. В следующем примере создается международный формат гггг-ММ-ДД:
формат OP может быть сгенерирован следующим образом:
Примечание: однако обычно не рекомендуется расширять стандартные библиотеки JavaScript (например, путем добавления этой функции к прототипу Date).
более продвинутая функция может генерировать настраиваемый вывод на основе параметра формата.
если писать функцию форматирования слишком долго, есть много библиотек, вокруг которых это делает. Некоторые другие ответы уже перечисляют их. Но увеличение зависимостей также имеет встречную часть.
стандартные функции форматирования ECMAScript:
начиная с более поздних версий ECMAScript, Date класс имеет определенное форматирование функции:
Примечание: можно генерировать пользовательские выходные данные из этих форматирования >
Я думаю, вы можете просто использовать нестандартное дата метод toLocaleFormat(formatString)
formatString: строка формата в том же формате, ожидаемом strftime() в с.
ссылки:
простой JavaScript является лучшим выбором для небольших onetimers.
С другой стороны, если вам нужно больше свиданий, MomentJS является отличным решением.
например:
в современных браузерах (*), вы можете просто сделать это:
выход, если выполнено сегодня (январь 24ᵗʰ 2016,):
(*) согласно MDN, "современные браузеры" означает Chrome 24+, Firefox 29+, Internet Explorer 11, Edge 12+, Opera 15+ & Safari сборка.
вы должны взглянуть на дата.js. Он добавляет много удобных помощников для работы с датами, например, в вашем случае:
Я могу получить ваш запрошенный формат в одной строке, не используя библиотеки и методы даты, просто regex:
Update: как указал @RobG, вывод даты.прототип.toString () зависит от реализации. Таким образом, используйте с осторожностью и при необходимости измените для своих реализаций, если вы используете это решение. В моем тестировании это надежно работает в Северной Америке, где основные браузеры (Chrome, Safari, Firefox и IE) возвращают один и тот же строковый формат.
@Sébastien -- альтернативная поддержка всех браузеров
Использование шаблона строки ECMAScript Edition 6 (ES6/ES2015):
Если вам нужно изменить разделители:
вот код, который я только что написал, чтобы обработать форматирование даты для проекта, над которым я работаю. Он имитирует функциональность форматирования даты PHP в соответствии с моими потребностями. Не стесняйтесь использовать его, это просто расширение уже существующего объекта Date (). Это может быть не самое элегантное решение, но это работает для моих потребностей.
Если вы используете jQuery UI в своем коде, есть встроенная функция formatDate() . Я использую его таким образом, чтобы отформатировать сегодняшнюю дату:
у нас есть много решений для этого, но я думаю, что лучший из них-это момент.js. Поэтому я лично предлагаю использовать момент.js для операций даты и времени.
на JavaScript решение, без использования каких-либо внешних библиотек:
вот как я реализовал для своих плагинов npm
полезным и гибким способом форматирования DateTimes в JavaScript является Intl.DateTimeFormat :
форматы даты и времени можно настроить с помощью аргумента options.
на Intl.DateTimeFormat object является конструктором для объектов, которые включают дату и время, зависящие от языка форматирование.
параметры
районов
необязательно. Строка с тегом языка BCP 47 или массив таких строк. Общую форму и интерпретацию аргумента locales см. На странице Intl. Допускаются следующие ключи расширения Unicode:
опции
необязательно. Объект с некоторыми или всеми из следующих свойства:
localeMatcher
алгоритм сопоставления локали для использования. Возможные значения: "lookup" и "best fit" по умолчанию: "best fit" . Сведения об этом параметре см. На странице Intl.
часовой пояс
часовой пояс для использования. Единственный реализаций стоимость должна признать "UTC" ; по умолчанию используется часовой пояс среды выполнения по умолчанию. Реализации могут также распознавать имена часовых поясов База данных часовых поясов IANA, например "Asia/Shanghai" , "Asia/Kolkata" , "America/New_York" .
hour12
следует ли использовать 12-часовое время (в отличие от 24-часового времени). Возможные значения: true и false ; значение по умолчанию зависит от локали.
formatMatcher
алгоритм сопоставления формата для использования. Возможные значения: "basic" и "best fit" по умолчанию: "best fit" . См. следующие пункты для получения информации о использование этого свойства.
следующие свойства описывают компоненты даты-времени для использования в форматированном выводе и их желаемые представления. Реализации необходимы для поддержки по крайней мере следующих подмножеств:
реализации могут поддерживать другие подмножества, и запросы будут согласовываться со всеми доступными комбинациями подмножеств-представлений, чтобы найти наилучшее соответствие. Два алгоритма доступны для этого согласования и выбраны formatMatcher свойство: полностью указано "basic" алгоритм и зависимый от реализации алгоритм "best fit".
будни
представление дня недели. Возможные значения: "narrow" , "short" , "long" .
представление эпохи. Возможные значения: "narrow" , "short" , "long" .
год
представление год. Возможные значения: "numeric" , "2-digit" .
месяц
представление месяца. Возможные значения: "numeric" , "2-digit" , "narrow" , "short" , "long" .
день
представление дня. Возможные значения: "numeric" , "2-digit" .
час
представление часов. Возможные значения: "numeric" , "2-digit" .
минуту
представление минут. Возможные значения: "numeric" , "2-digit" .
второй
представление второго. Возможные значения: "numeric" , "2-digit" .
timeZoneName
представление имени часового пояса. Возможные значения: "short" , "long" . Значение по умолчанию для каждого свойства компонента date-time не определено, но если все свойства компонента не определены, то год, месяц и день считаются "numeric" .
we are trying to format date in an e-commerce JavaScript application. We have tried using appending "00:00:00" to the date String. But in IE 11, with that string we are getting a Invalid Date error.
So we have tried a few more options but the the date Object we are getting is unexpected:
Is the only effective way is to use "moment.js" to solve these issues.
Thanks and Regards
a date is a date you do not format a date; you format an string. Can you please share what is the "string" format you want for your date? Or what you want is trim the time from your date?
"Is the only effective way is to use "moment.js" to solve these issues." No. A library can help but is not required. Probably a duplicate of Where can I find documentation on formatting a date in JavaScript? or How to format a JavaScript date.
"unexpected". what about those results is unexpected? Look at the documentation for the Date object and it will tell you exactly how it's using those values you've passed in. This also looks like a question about parsing a date rather than formatting.
1 Answer 1
It is unclear whether you're asking about creating dates or formatting them as strings. But there is nothing unexpected here.
You should not use leading zeros on numbers. In some instances in older browsers it can indicate octal rather than decimal. Anyway, the above will produce a "local" date for 10 March 2017 at 00:00:00 based on the host system time zone setting. Yours seems to be set for UTC-08:00.
you're asking the Date constructor to parse a string, something it's notoriously bad at. However, browsers older than IE 8 should parse it correctly and produce a date for 10 March 2017 at 00:00:00 UTC, which has a timezone offset of 00:00.
Since your timezone is -08:00, when you write it to output the values will be adjusted for the host timezone (i.e. local) so you see a date for 9 March 2017 at 16:00:00 (or 4 pm).
Note that using the built–in Date.prototype.toString will result in an implementation dependent string that may be different in each host. If you need information on formatting a date, see Where can I find documentation on formatting a date in JavaScript? or How to format a JavaScript date.
Is the only effective way is to use "moment.js" to solve these issues.
It's unclear what issues you're trying to solve, however a good, light, parsing and formatting library is fecha.js. If you also want to do arithmetic, you might find moment.js suitable. But it's not difficult to write a function to parse specific formats or create suitable strings, see the above links.
I'm working with HTML5 elements on my webpage. By default input type="date" shows date as YYYY-MM-DD .
The question is, is it possible to change its format to something like: DD-MM-YYYY ?
I waste my time trying to make it dd/mm/yyyy . just use another library like moment or jQuery datepicker
If anyone out there is looking for a quick fix such as adding the attribute format="yyyy-mm-dd" . There is nothing like that in the specs.
Firefox added an option to use the OS' locale to display dates, check my answer. I know it does not solve the root issue, but for developers is a nice option.
19 Answers 19
It is impossible to change the format
We have to differentiate between the over the wire format and the browser's presentation format.
Wire format
The HTML5 date input specification refers to the RFC 3339 specification, which specifies a full-date format equal to: yyyy-mm-dd . See section 5.6 of the RFC 3339 specification for more details.
This format is used by the value HTML attribute and DOM property and is the one used when doing an ordinary form submission.
Presentation format
Browsers are unrestricted in how they present a date input. At the time of writing Chrome, Edge, Firefox, and Opera have date support (see here). They all display a date picker and format the text in the input field.
Desktop devices
For Chrome, Firefox, and Opera, the formatting of the input field's text is based on the browser's language setting. For Edge, it is based on the Windows language setting. Sadly, all web browsers ignore the date formatting configured in the operating system. To me this is very strange behaviour, and something to consider when using this input type. For example, Dutch users that have their operating system or browser language set to en-us will be shown 01/30/2019 instead of the format they are accustomed to: 30-01-2019 .
Internet Explorer 9, 10, and 11 display a text input field with the wire format.
Mobile devices
Specifically for Chrome on Android, the formatting is based on the Android display language. I suspect that the same is true for other browsers, though I've not been able to verify this.
Читайте также: