Jak ustawić format daty w tagu wprowadzania daty HTML?
105
Zastanawiam się, czy możliwe jest ustawienie formatu daty w <input type="date"></input>tagu html ... Obecnie jest to rrrr-mm-dd, a potrzebuję w formacie dd-mm-rrrr.
Moje ustawienia kraju to holenderski, aw Chrome pokazuje DD-MM-RRRR. Wydaje się, że zależy to od ustawień systemu Windows klienta korzystającego ze strony internetowej.
dark_passages
Odpowiedzi:
11
Ty nie.
Po pierwsze, twoje pytanie jest niejednoznaczne - czy masz na myśli format, w jakim jest wyświetlany użytkownikowi, czy format, w jakim jest przesyłany na serwer WWW?
Jeśli masz na myśli format, w jakim jest wyświetlany użytkownikowi, to jest to kwestia interfejsu użytkownika końcowego, a nie niczego, co określisz w kodzie HTML. Zwykle spodziewałbym się, że będzie on oparty na formacie daty ustawionym w ustawieniach regionalnych systemu operacyjnego. Nie ma sensu próbować zastępować go własnym preferowanym formatem, ponieważ format, w którym jest wyświetlany, jest (ogólnie rzecz biorąc) prawidłowy dla ustawień regionalnych użytkownika i formatu, w którym użytkownik jest przyzwyczajony do zapisywania / rozumienia dat.
Jeśli masz na myśli format, w jakim jest przesyłany na serwer, próbujesz naprawić niewłaściwy problem. To, co musisz zrobić, to zaprogramować kod po stronie serwera, aby akceptował daty w formacie rrrr-mm-dd.
Niestety, twój drugi komentarz nie do końca sprawdza się w prawdziwym świecie. Niektóre przeglądarki, takie jak Chrome i Opera, przynajmniej szanują kolejność jednostek, ale nic poza tym. Na przykład moje ustawienia regionalne systemu operacyjnego określają, że jako krótka data, pierwszy dzień sierpnia tego roku powinien być 1 / 8-2016 , ale nawet Chrome i Opera pokazują 01/08/2016 . Inne przeglądarki, takie jak Safari i Firefox (przynajmniej na OS X), całkowicie ignorują ustawienia systemu operacyjnego i zawsze pokazują 2016-08-16 bez względu na wszystko. W witrynie, w której użytkownicy mogą ustawiać własne preferencje dotyczące dat, z pewnością ma sens zastąpienie tego.
Janus Bahs Jacquet
(Zignoruj uwagę o Firefoksie i Safari… Jestem zmęczony. Żadna przeglądarka w ogóle nie obsługuje typu daty, więc pokazują tylko podstawowy format wartości, który w przypadku mojego obecnego kodu to RRRR-MM-DD .)
Janus Bahs Jacquet
Czy większość ludzi pyta, jak zmienić format wyświetlania / wprowadzania daty, chcąc umożliwić użytkownikom ustawienie własnych preferencji lub narzucić własne preferowane formaty daty na świecie? To ostatnie jest czymś, czego nikt nie powinien robić, jak powiedziałem, ale można by się spierać o to, czy to pierwsze jest właściwe. Ale byłoby to ustawienie prezentacyjne, a więc poza zakresem HTML.
Stewart
Problem polega na tym, że jest to ustawienie prezentacyjne , którego nie można ustawić . Ustawienia prezentacji generalnie należą do CSS, ale nie ma możliwości zmiany tego w CSS (ani nigdzie indziej). Poza tym nawet sama specyfikacja HTML nie jest wolna od ustawień prezentacji. Na przykład, w sekcji na temat input[type=password]mówi się, że „klient użytkownika powinien zasłaniać wartość, tak aby osoby inne niż użytkownik jej nie widziały”, co jest równie dobrą prezentacją, jak stwierdzeniem, że klient użytkownika powinien przedstawiać datę w określony sposób.
Janus Bahs Jacquet
1
Niektórzy powiedzieliby, że to dobrze , że nie można go ustawić, ponieważ uniemożliwia to webmasterom narzucanie ich własnych preferowanych formatów dat na świecie. Ale wprowadzenie hasła zmusiło mnie do myślenia. W wielu miejscach specyfikacja HTML zawiera zalecenia dotyczące prezentacji, które są zasadniczo zaleceniami dotyczącymi domyślnych arkuszy stylów przeglądarki. Różnica polega na tym, że wydaje się, że nie ma właściwości CSS dla tego konkretnego aspektu prezentacji.
Stewart
11
Znalazłem to samo lub pokrewne pytanie w witrynie Stackoverflow
Czy istnieje sposób, aby zmienić format wejściowy = „data”?
Znalazłem jedno proste rozwiązanie, nie możesz podać formatu cząstek, ale możesz dostosować w ten sposób.
Dlaczego nie skorzystać z kontroli daty html5 w obecnej postaci, z innymi atrybutami, które pozwalają jej działać poprawnie w przeglądarkach obsługujących typ daty i nadal działa w innych przeglądarkach, takich jak Firefox, które jeszcze nie obsługują typu daty
<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 = "RRRR-MM-DD" wymagany wzorzec = "[0-9] {4} - [0-9] {2} - [0-9] ] {2} "title =" Wprowadź datę w tym formularzuart RRRR-MM-DD "/> </pre>
Paul IE,
8
Wymóg wyraźnie brzmiał, cytuję - „Potrzebuję go w formacie dd-mm-rrrr”. Jak to pomaga?
Harijs Krūtainis
1
nie działa z przeglądarką Firefox. Ten kod HTML pokazuje dane wejściowe z symbolem zastępczym mm / dd / rrrr. Moje okna i mój firefox mają ustawiony język holenderski jako pierwszy. Ustawienia regionalne systemu Windows pokazują krótką datę: 30-11-2018.
Nie wiem tego na pewno, ale myślę, że ma to być obsługiwane przez przeglądarkę na podstawie ustawień daty / czasu użytkownika. Spróbuj ustawić komputer, aby wyświetlał daty w tym formacie.
Dziękujemy za ten fragment kodu, który może zapewnić natychmiastową pomoc. Właściwe wyjaśnienie znacznie poprawiłoby jego wartość edukacyjną, pokazując, dlaczego jest to dobre rozwiązanie problemu, i uczyniłoby je bardziej użytecznym dla przyszłych czytelników z podobnymi, ale nie identycznymi pytaniami. Proszę edytować swoje odpowiedzi, aby dodać wyjaśnienie, i dać wskazówkę co zastosować ograniczenia i założenia.
Toby Speight
1
Przeprowadziłem wiele badań i nie sądzę, aby można było wymusić format pliku <input type="date">. Przeglądarka wybiera format lokalny iw zależności od ustawień użytkownika, jeśli język użytkownika jest w języku angielskim, data zostanie wyświetlona w formacie angielskim (mm / dd / rrrr).
Moim zdaniem najlepszym rozwiązaniem jest użycie wtyczki do sterowania wyświetlaczem.
let userDate = document.getElementById('userDate').value.split('-'),
parsedDate =newDate((`${userDate[1]}-${userDate[2]}-${userDate[0]}`));
Możesz dowolnie formatować datę. Możesz utworzyć nową datę () i pobrać stamtąd wszystkie informacje ... lub po prostu użyć „userDate []”, aby zbudować swój ciąg.
Pamiętaj, że niektóre sposoby wprowadzania daty do funkcji „nowa data ()” dają nieoczekiwany wynik. (tj. - jeden dzień później)
Kiedy publikujesz tutaj kod HTML, bardzo ważne jest, aby sformatować go jako kod. Jeśli tego nie zrobisz, zostanie sformatowany jako część strony, a Twoja odpowiedź nie wygląda na odpowiedź. Jeśli nie wiesz, jak sformatować, w centrum pomocy znajdziesz fajny przewodnik na ten temat
Zoe
0
Krótka bezpośrednia odpowiedź brzmi `` nie '' lub `` nie '' po wyjęciu z pudełka, ale wymyśliłem metodę użycia pola tekstowego i czystego kodu JS do symulacji wprowadzania daty i wykonania dowolnego formatu, oto kod
<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 - pamiętaj, że ta metoda działa tylko w przeglądarkach obsługujących typ daty.
2- pierwsza funkcja w kodzie JS jest przeznaczona dla przeglądarek, które nie obsługują typu daty i ustawiają wygląd na normalne wprowadzanie tekstu.
3- jeśli użyjesz tego kodu do wielu danych wejściowych na swojej stronie, zmień identyfikator "xTime" wpisanego tekstu zarówno w wywołaniu funkcji, jak i samym wejściu na coś innego i oczywiście użyj nazwy wejścia, które chcesz dla przesłać formularz.
4-na drugiej funkcji możesz użyć dowolnego formatu zamiast dnia + "/" + miesiąc + "/" + rok, na przykład rok + "/" + miesiąc + "/" + dzień, a podczas wprowadzania tekstu użyj symbolu zastępczego lub wartości jako rrrr / mm / dd dla użytkownika podczas ładowania strony.
<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>
Możemy zmienić ten format rrrr-mm-dd na dd-mm-rrrr w javascript za pomocą metody podziału.
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
Odpowiedzi:
Ty nie.
Po pierwsze, twoje pytanie jest niejednoznaczne - czy masz na myśli format, w jakim jest wyświetlany użytkownikowi, czy format, w jakim jest przesyłany na serwer WWW?
Jeśli masz na myśli format, w jakim jest wyświetlany użytkownikowi, to jest to kwestia interfejsu użytkownika końcowego, a nie niczego, co określisz w kodzie HTML. Zwykle spodziewałbym się, że będzie on oparty na formacie daty ustawionym w ustawieniach regionalnych systemu operacyjnego. Nie ma sensu próbować zastępować go własnym preferowanym formatem, ponieważ format, w którym jest wyświetlany, jest (ogólnie rzecz biorąc) prawidłowy dla ustawień regionalnych użytkownika i formatu, w którym użytkownik jest przyzwyczajony do zapisywania / rozumienia dat.
Jeśli masz na myśli format, w jakim jest przesyłany na serwer, próbujesz naprawić niewłaściwy problem. To, co musisz zrobić, to zaprogramować kod po stronie serwera, aby akceptował daty w formacie rrrr-mm-dd.
źródło
input[type=password]
mówi się, że „klient użytkownika powinien zasłaniać wartość, tak aby osoby inne niż użytkownik jej nie widziały”, co jest równie dobrą prezentacją, jak stwierdzeniem, że klient użytkownika powinien przedstawiać datę w określony sposób.Znalazłem to samo lub pokrewne pytanie w witrynie Stackoverflow
Znalazłem jedno proste rozwiązanie, nie możesz podać formatu cząstek, ale możesz dostosować w ten sposób.
Kod HTML:
Kod CSS:
Kod JavaScript:
Wynik:
źródło
Jeśli używasz jQuery, oto ładna prosta metoda
Lub jest stary tradycyjny sposób:
źródło
Dlaczego nie skorzystać z kontroli daty html5 w obecnej postaci, z innymi atrybutami, które pozwalają jej działać poprawnie w przeglądarkach obsługujących typ daty i nadal działa w innych przeglądarkach, takich jak Firefox, które jeszcze nie obsługują typu daty
źródło
Myślę, że w HTML nie ma składni formatu DD-MM-RRRR. Skorzystaj z tej strony http://www.java2s.com/Code/SQLServer/Date-Timezone/FormatdateMmmddyyyyhhmmdp.htm . Coś ci to pomoże. W przeciwnym razie użyj selektora dat javascript.
źródło
Nie wiem tego na pewno, ale myślę, że ma to być obsługiwane przez przeglądarkę na podstawie ustawień daty / czasu użytkownika. Spróbuj ustawić komputer, aby wyświetlał daty w tym formacie.
źródło
źródło
Przeprowadziłem wiele badań i nie sądzę, aby można było wymusić format pliku
<input type="date">
. Przeglądarka wybiera format lokalny iw zależności od ustawień użytkownika, jeśli język użytkownika jest w języku angielskim, data zostanie wyświetlona w formacie angielskim (mm / dd / rrrr).Moim zdaniem najlepszym rozwiązaniem jest użycie wtyczki do sterowania wyświetlaczem.
Jquery DatePicker wydaje się dobrą opcją, ponieważ możesz wymusić lokalizację , format daty ...
źródło
Podałem nieco inną odpowiedź niż cokolwiek powyżej, które przeczytałem.
Moje rozwiązanie wykorzystuje trochę JavaScript i dane wejściowe HTML.
Data zaakceptowana przez dane wejściowe skutkuje ciągiem w formacie „rrrr-mm-dd”. Możemy go podzielić i odpowiednio umieścić jako nową datę ().
Oto podstawowy kod HTML:
Oto podstawowy JS:
Możesz dowolnie formatować datę. Możesz utworzyć nową datę () i pobrać stamtąd wszystkie informacje ... lub po prostu użyć „userDate []”, aby zbudować swój ciąg.
Pamiętaj, że niektóre sposoby wprowadzania daty do funkcji „nowa data ()” dają nieoczekiwany wynik. (tj. - jeden dzień później)
źródło
źródło
Krótka bezpośrednia odpowiedź brzmi `` nie '' lub `` nie '' po wyjęciu z pudełka, ale wymyśliłem metodę użycia pola tekstowego i czystego kodu JS do symulacji wprowadzania daty i wykonania dowolnego formatu, oto kod
1 - pamiętaj, że ta metoda działa tylko w przeglądarkach obsługujących typ daty.
2- pierwsza funkcja w kodzie JS jest przeznaczona dla przeglądarek, które nie obsługują typu daty i ustawiają wygląd na normalne wprowadzanie tekstu.
3- jeśli użyjesz tego kodu do wielu danych wejściowych na swojej stronie, zmień identyfikator "xTime" wpisanego tekstu zarówno w wywołaniu funkcji, jak i samym wejściu na coś innego i oczywiście użyj nazwy wejścia, które chcesz dla przesłać formularz.
4-na drugiej funkcji możesz użyć dowolnego formatu zamiast dnia + "/" + miesiąc + "/" + rok, na przykład rok + "/" + miesiąc + "/" + dzień, a podczas wprowadzania tekstu użyj symbolu zastępczego lub wartości jako rrrr / mm / dd dla użytkownika podczas ładowania strony.
źródło
Do formatowania w mm-dd-rrrr
aa = date.split („-”)
data = aa [1] + '-' + aa [2] + '-' + aa [0]
źródło
Czysta implementacja bez zależności. https://jsfiddle.net/h3hqydxa/1/
źródło
Możemy zmienić ten format rrrr-mm-dd na dd-mm-rrrr w javascript za pomocą metody podziału.
źródło
Oto rozwiązanie:
miejmy nadzieję, że to rozwiąże problem :)
źródło
Format wartości daty to
'YYYY-MM-DD'
. Zobacz poniższy przykładWszystko, czego potrzebujesz, to sformatować datę w php, asp, ruby lub czymkolwiek, aby mieć ten format.
źródło