Мои настройки страны голландские, а в Chrome отображается ДД-ММ-ГГГГ. Кажется, это зависит от настроек Windows клиента, использующего веб-сайт.
dark_passages
Ответы:
11
Вы этого не сделаете.
Во-первых, ваш вопрос неоднозначен - вы имеете в виду формат, в котором он отображается для пользователя, или формат, в котором он передается на веб-сервер?
Если вы имеете в виду формат, в котором он отображается для пользователя, то это связано с интерфейсом конечного пользователя, а не с тем, что вы указываете в HTML. Обычно я ожидаю, что это будет основано на формате даты, установленном в настройках локали операционной системы. Нет смысла пытаться переопределить его собственным предпочтительным форматом, поскольку формат, в котором он отображается, является (вообще говоря) правильным для локали пользователя и формата, в котором пользователь записывает / понимает даты.
Если вы имеете в виду формат, в котором он передается на сервер, вы пытаетесь исправить не ту проблему. Что вам нужно сделать, так это запрограммировать серверный код для приема дат в формате гггг-мм-дд.
К сожалению, ваш второй комментарий не совсем верен в реальном мире. Некоторые браузеры, такие как Chrome и Opera, по крайней мере соблюдают порядок объектов, но не более того. Например, мои настройки ОС локали указать , что в короткий день в первый день августа этого года должно быть 1 / 8-2016 , но Chrome и Opera показывают 01/08/2016 . Другие браузеры, такие как Safari и Firefox (по крайней мере, в OS X), полностью игнорируют настройки ОС и всегда показывают 2016-08-16, несмотря ни на что. На сайте, где пользователи могут устанавливать свои собственные предпочтения даты, определенно имеет смысл переопределить это.
Janus Bahs Jacquet
(Не обращайте внимания на примечание о Firefox и Safari ... Я устал. Ни один из браузеров не поддерживает тип даты вообще, поэтому они просто показывают основной формат значения, который в случае моего текущего кода - ГГГГ-ММ-ДД .)
Janus Bahs Jacquet
Большинство людей спрашивают, как изменить формат отображения / ввода даты, желая позволить пользователям устанавливать свои собственные предпочтения, или навязывать свои собственные предпочтительные форматы даты миру? Последнее, как я уже сказал, никому не следует делать, но вы можете спорить в любом случае о том, подходит ли первое. Но это будет презентационная установка, выходящая за рамки HTML.
Стюарт
Проблема в том, что это презентационная установка , которую невозможно установить . Параметры представления в целом относятся к CSS, но изменить это в CSS (или где-либо еще) невозможно. Кроме того, даже сама спецификация HTML не свободна от презентационных настроек. Например, в разделе input[type=password]говорится, что «пользовательский агент должен скрывать значение, чтобы люди, кроме пользователя, не могли его увидеть», что является такой же презентацией, как и утверждение, что пользовательский агент должен представлять дату определенным образом.
Janus Bahs Jacquet
1
Некоторые скажут, что это хорошо , что его нельзя установить, так как это не позволяет веб-мастерам навязывать миру свои собственные предпочтительные форматы даты. Но ввод пароля заставил меня задуматься. Во многих местах спецификация HTML действительно дает рекомендации по оформлению, которые по сути являются рекомендациями для таблиц стилей по умолчанию для браузера. Разница здесь в том, что, похоже, нет свойства CSS для этого конкретного аспекта представления.
Стюарт
11
Я нашел тот же вопрос или связанный с ним вопрос в stackoverflow
Есть ли способ изменить формат input type = «date»?
Я нашел одно простое решение: вы не можете указать формат частиц, но вы можете настроить его.
Почему бы не использовать элемент управления датой html5 как есть, с другими атрибутами, которые позволяют ему нормально работать в браузерах, поддерживающих тип даты, и по-прежнему работать в других браузерах, таких как firefox, которые еще не поддерживают тип даты
<inputtype="date"name="input1"placeholder="YYYY-MM-DD"requiredpattern="[0-9]{4}-[0-9]{2}-[0-9]{2}"title="Enter a date in this formart YYYY-MM-DD"/>
<pre> <input type = "text" name = "input1" placeholder = "ГГГГ-ММ-ДД" обязательный шаблон = "[0-9] {4} - [0-9] {2} - [0-9] ] {2} "title =" Введите дату в этом форматеart ГГГГ-ММ-ДД "/> </pre>
Paul IE
8
Я цитирую требование явно было: «Мне нужно это в формате дд-мм-гггг». Как это помогает?
Harijs Krūtainis
1
не работает с Firefox. Этот HTML показывает ввод с заполнителем мм / дд / гггг. Мои окна и мой firefox настроены на голландский как первый язык. В региональных настройках Windows указана краткая дата: 30-11-2018.
Я не знаю этого наверняка, но я думаю, что это должно обрабатываться браузером на основе настроек даты / времени пользователя. Попробуйте настроить компьютер на отображение дат в этом формате.
Благодарим вас за этот фрагмент кода, который может оказать немедленную помощь. Правильное объяснение значительно повысило бы его образовательную ценность, показав, почему это хорошее решение проблемы, и сделало бы его более полезным для будущих читателей с похожими, но не идентичными вопросами. Пожалуйста , измените свой ответ , чтобы добавить объяснение, и дать указание о том , что применять ограничения и допущения.
Тоби Спейт
1
Я провел много исследований и не думаю, что можно принудительно использовать формат файла <input type="date">. Браузер выбирает локальный формат, и в зависимости от настроек пользователя, если язык пользователя английский, дата будет отображаться в английском формате (мм / дд / гггг).
На мой взгляд, лучшее решение - использовать плагин для управления дисплеем.
let userDate = document.getElementById('userDate').value.split('-'),
parsedDate =newDate((`${userDate[1]}-${userDate[2]}-${userDate[0]}`));
Вы можете отформатировать дату как хотите. Вы можете создать новый Date () и получить оттуда всю информацию ... или просто использовать userDate [] для построения вашей строки.
Имейте в виду, что некоторые способы ввода даты в 'new Date ()' дают неожиданный результат. (т.е. - на один день позже)
Когда вы размещаете здесь HTML-код, очень важно, чтобы вы отформатировали его как код. Если вы этого не сделаете, он будет отформатирован как часть страницы, и ваш ответ не будет похож на ответ. Если вы не знаете, как форматировать, в справочном центре есть хорошее руководство
Зои,
0
короткий прямой ответ - нет или нет из коробки, но я придумал метод использования текстового поля и чистого JS-кода для имитации ввода даты и выполнения любого формата, который вы хотите, вот код
<html><body>
date :
<spanstyle="position: relative;display: inline-block;border:1px solid #a9a9a9;height:24px;width:500px"><inputtype="date"class="xDateContainer"onchange="setCorrect(this,'xTime');"style="position: absolute;opacity:0.0;height:100%;width:100%;"><inputtype="text"id="xTime"name="xTime"value="dd / mm / yyyy"style="border: none;height:90%;"tabindex="-1"><spanstyle="display: inline-block;width:20px;z-index:2;float: right;padding-top:3px;"tabindex="-1">▼</span></span><scriptlanguage="javascript">var matchEnterdDate=0;//function to set back date opacity for non supported browsers
window.onload =function(){var input = document.createElement('input');
input.setAttribute('type','date');
input.setAttribute('value','some text');if(input.value ==="some text"){
allDates = document.getElementsByClassName("xDateContainer");
matchEnterdDate=1;for(var i =0; i < allDates.length; i++){
allDates[i].style.opacity ="1";}}}//function to convert enterd date to any formatfunction setCorrect(xObj,xTraget){var date =newDate(xObj.value);var month = date.getMonth();var day = date.getDate();var year = date.getFullYear();if(month!='NaN'){
document.getElementById(xTraget).value=day+" / "+month+" / "+year;}else{if(matchEnterdDate==1){document.getElementById(xTraget).value=xObj.value;}}}</script></body></html>
1- обратите внимание, что этот метод работает только для браузера, поддерживающего тип даты.
2 - первая функция в коде JS предназначена для браузера, который не поддерживает тип даты и устанавливает вид обычного ввода текста.
3- если вы будете использовать этот код для нескольких вводов даты на своей странице, измените идентификатор «xTime» ввода текста как в вызове функции, так и в самом вводе на что-то другое и, конечно, используйте имя ввода, которое вы хотите форма отправить.
4 - во второй функции вы можете использовать любой формат вместо дня + "/" + месяц + "/" + год, например год + "/" + месяц + "/" + день, а при вводе текста используйте заполнитель или значение как гггг / мм / дд для пользователя при загрузке страницы.
<styletype="text/css">.dateField {width:150px;height:32px;border: none;position: absolute;top:32px;left:32px;opacity:0.5;font-size:12px;font-weight:300;font-family: Arial;opacity:0;}.fakeDateField {width:100px;/* less, so we don't intercept click on browser chrome for date picker. could also change this at runtime */height:32px;/* same as above */border: none;position: absolute;/* position overtop the date field */top:32px;left:32px;display: visible;font-size:12px;/* same as above */font-weight:300;/* same as above */font-family: Arial;/* same as above */line-height:32px;/* for vertical centering */}</style><inputclass="dateField"id="dateField"type="date"></input><divid="fakeDateField"class="fakeDateField"><em>(initial value)</em></div><script>var dateField = document.getElementById("dateField");var fakeDateField = document.getElementById("fakeDateField");
fakeDateField.addEventListener("click",function(){
document.getElementById("dateField").focus();},false);
dateField.addEventListener("focus",function(){
fakeDateField.style.opacity =0;
dateField.style.opacity =1;});
dateField.addEventListener("blur",function(){
fakeDateField.style.opacity =1;
dateField.style.opacity =0;});
dateField.addEventListener("change",function(){// this method could be replaced by momentJS stuffif(dateField.value.length <1){return;}var date =newDate(dateField.value);var day = date.getUTCDate();var month = date.getUTCMonth()+1;//zero-based month values
fakeDateField.innerHTML =(month <10?"0":"")+ month +" / "+ day;});</script>
Мы можем изменить этот формат yyyy-mm-dd на dd-mm-yyyy в javascript с помощью метода разделения.
let dateyear="2020-03-18";let arr = dateyear.split('-')//now we get array of these and we can made in any format as we wantlet dateFormat = arr[2]+"-"+ arr[1]+"-"+ arr[0]//In dd-mm-yyyy format
Ответы:
Вы этого не сделаете.
Во-первых, ваш вопрос неоднозначен - вы имеете в виду формат, в котором он отображается для пользователя, или формат, в котором он передается на веб-сервер?
Если вы имеете в виду формат, в котором он отображается для пользователя, то это связано с интерфейсом конечного пользователя, а не с тем, что вы указываете в HTML. Обычно я ожидаю, что это будет основано на формате даты, установленном в настройках локали операционной системы. Нет смысла пытаться переопределить его собственным предпочтительным форматом, поскольку формат, в котором он отображается, является (вообще говоря) правильным для локали пользователя и формата, в котором пользователь записывает / понимает даты.
Если вы имеете в виду формат, в котором он передается на сервер, вы пытаетесь исправить не ту проблему. Что вам нужно сделать, так это запрограммировать серверный код для приема дат в формате гггг-мм-дд.
источник
input[type=password]
говорится, что «пользовательский агент должен скрывать значение, чтобы люди, кроме пользователя, не могли его увидеть», что является такой же презентацией, как и утверждение, что пользовательский агент должен представлять дату определенным образом.Я нашел тот же вопрос или связанный с ним вопрос в stackoverflow
Я нашел одно простое решение: вы не можете указать формат частиц, но вы можете настроить его.
HTML-код:
Код CSS:
Код Javascript:
Вывод:
источник
Если вы используете jQuery, вот хороший простой метод
Или есть старый традиционный способ:
источник
Почему бы не использовать элемент управления датой html5 как есть, с другими атрибутами, которые позволяют ему нормально работать в браузерах, поддерживающих тип даты, и по-прежнему работать в других браузерах, таких как firefox, которые еще не поддерживают тип даты
источник
Думаю, да, в HTML нет синтаксиса для формата ДД-ММ-ГГГГ. См. Эту страницу http://www.java2s.com/Code/SQLServer/Date-Timezone/FormatdateMmmddyyyyhhmmdp.htm . Отчасти это вам поможет. В противном случае используйте средство выбора даты javascript.
источник
Я не знаю этого наверняка, но я думаю, что это должно обрабатываться браузером на основе настроек даты / времени пользователя. Попробуйте настроить компьютер на отображение дат в этом формате.
источник
источник
Я провел много исследований и не думаю, что можно принудительно использовать формат файла
<input type="date">
. Браузер выбирает локальный формат, и в зависимости от настроек пользователя, если язык пользователя английский, дата будет отображаться в английском формате (мм / дд / гггг).На мой взгляд, лучшее решение - использовать плагин для управления дисплеем.
Jquery DatePicker кажется хорошим вариантом, поскольку вы можете принудительно установить локализацию , формат даты ...
источник
Я придумал несколько иной ответ, чем все, что я читал выше.
В моем решении используется небольшой фрагмент JavaScript и ввод HTML.
Дата, принятая входом, приводит к строке в формате «гггг-мм-дд». Мы можем разделить его и правильно разместить как новую дату ().
Вот базовый HTML:
Вот базовый JS:
Вы можете отформатировать дату как хотите. Вы можете создать новый Date () и получить оттуда всю информацию ... или просто использовать userDate [] для построения вашей строки.
Имейте в виду, что некоторые способы ввода даты в 'new Date ()' дают неожиданный результат. (т.е. - на один день позже)
источник
источник
короткий прямой ответ - нет или нет из коробки, но я придумал метод использования текстового поля и чистого JS-кода для имитации ввода даты и выполнения любого формата, который вы хотите, вот код
1- обратите внимание, что этот метод работает только для браузера, поддерживающего тип даты.
2 - первая функция в коде JS предназначена для браузера, который не поддерживает тип даты и устанавливает вид обычного ввода текста.
3- если вы будете использовать этот код для нескольких вводов даты на своей странице, измените идентификатор «xTime» ввода текста как в вызове функции, так и в самом вводе на что-то другое и, конечно, используйте имя ввода, которое вы хотите форма отправить.
4 - во второй функции вы можете использовать любой формат вместо дня + "/" + месяц + "/" + год, например год + "/" + месяц + "/" + день, а при вводе текста используйте заполнитель или значение как гггг / мм / дд для пользователя при загрузке страницы.
источник
Для форматирования в мм-дд-гггг
aa = date.split ("-")
date = aa [1] + '-' + aa [2] + '-' + aa [0]
источник
Чистая реализация без зависимостей. https://jsfiddle.net/h3hqydxa/1/
источник
Мы можем изменить этот формат yyyy-mm-dd на dd-mm-yyyy в javascript с помощью метода разделения.
источник
Вот решение:
надеюсь, это решит проблему :)
источник
Формат значения даты
'YYYY-MM-DD'
. См. Следующий примерВсе, что вам нужно, это отформатировать дату в php, asp, ruby или в любом другом формате, чтобы иметь этот формат.
источник