Wie stelle ich das Datumsformat im HTML-Datumseingabe-Tag ein?
105
Ich frage mich, ob es möglich ist, das Datumsformat im HTML- <input type="date"></input>Tag festzulegen ... Derzeit ist es JJJJ-MM-TT, während ich es im Format TT-MM-JJJJ benötige.
Meine Ländereinstellungen sind Niederländisch und in Chrome wird TT-MM-JJJJ angezeigt. Es scheint, dass dies von den Windows-Einstellungen des Clients abhängt, der die Website verwendet.
dark_passages
Antworten:
11
Das tust du nicht.
Erstens ist Ihre Frage nicht eindeutig - meinen Sie das Format, in dem sie dem Benutzer angezeigt wird, oder das Format, in dem sie an den Webserver übertragen wird?
Wenn Sie das Format meinen, in dem es dem Benutzer angezeigt wird, liegt dies an der Endbenutzeroberfläche, nicht an irgendetwas, das Sie im HTML angeben. Normalerweise würde ich erwarten, dass es auf dem Datumsformat basiert, das in den Gebietsschemaeinstellungen des Betriebssystems festgelegt ist. Es macht keinen Sinn, zu versuchen, es mit Ihrem eigenen bevorzugten Format zu überschreiben, da das Format, in dem es angezeigt wird, (im Allgemeinen) das richtige für das Gebietsschema des Benutzers und das Format ist, in dem der Benutzer Daten schreibt / versteht.
Wenn Sie das Format meinen, in dem es an den Server übertragen wird, versuchen Sie, das falsche Problem zu beheben. Sie müssen den serverseitigen Code so programmieren, dass Datumsangaben im Format JJJJ-MM-TT akzeptiert werden.
Leider trifft Ihr zweiter Kommentar in der realen Welt nicht ganz zu. Einige Browser, wie Chrome und Opera, respektieren zumindest die Reihenfolge der Entitäten, jedoch nicht mehr. In meinen Gebietsschemaeinstellungen für das Betriebssystem ist beispielsweise festgelegt, dass der erste Augusttag dieses Jahres als kurzes Datum der 08.01.2016 sein sollte , aber auch Chrome und Opera zeigen den 01.08.2016 . Andere Browser wie Safari und Firefox (zumindest unter OS X) ignorieren die Betriebssystemeinstellungen vollständig und zeigen immer 2016-08-16 an, egal was passiert . Auf einer Site, auf der Benutzer ihre eigenen Datumseinstellungen festlegen können, ist es sicherlich sinnvoll, diese zu überschreiben.
Janus Bahs Jacquet
(Ignorieren Sie den Hinweis zu Firefox und Safari… Ich bin müde. Keiner der Browser unterstützt den Datumstyp überhaupt, daher wird nur das zugrunde liegende Format des Werts angezeigt, das bei meinem aktuellen Code JJJJ-MM-TT lautet .)
Janus Bahs Jacquet
Fragen sich die meisten Leute, wie das Anzeige- / Eingabedatumformat geändert werden soll, damit Benutzer ihre eigenen Einstellungen vornehmen oder der Welt ihre eigenen bevorzugten Datumsformate hinzufügen können? Letzteres sollte niemand tun, wie ich bereits sagte, aber Sie könnten so oder so darüber streiten, ob Ersteres angemessen ist. Aber es wäre eine Präsentationseinstellung, also außerhalb des Bereichs von HTML.
Stewart
Das Problem ist, dass es sich um eine Präsentationseinstellung handelt , die nicht festgelegt werden kann . Präsentationseinstellungen gehören im Allgemeinen zu CSS, aber es gibt keine Möglichkeit, dies in CSS (oder anderswo) zu ändern. Außerdem ist selbst die HTML-Spezifikation selbst nicht frei von Präsentationseinstellungen. In dem Abschnitt über input[type=password]heißt es beispielsweise, dass „der Benutzeragent den Wert verdecken sollte, damit andere als der Benutzer ihn nicht sehen können“. Dies ist ebenso eine Präsentation wie die Aussage, dass der Benutzeragent das Datum auf eine bestimmte Weise darstellen sollte.
Janus Bahs Jacquet
1
Einige würden sagen , dass es gut ist, dass es nicht eingestellt werden kann, da es Webmaster daran hindert, der Welt ihre eigenen bevorzugten Datumsformate zuzufügen. Aber Passworteingaben haben mich zum Nachdenken gebracht. An vielen Stellen enthält die HTML-Spezifikation Präsentationsempfehlungen, die im Wesentlichen Empfehlungen für Standard-Stylesheets des Browsers sind. Der Unterschied besteht darin, dass es für diesen speziellen Präsentationsaspekt keine CSS-Eigenschaft zu geben scheint.
Stewart
11
Ich habe die gleiche Frage oder eine verwandte Frage zum Stapelüberlauf gefunden
Gibt es eine Möglichkeit, den Eingabetyp = "Datums" -Format zu ändern?
Ich habe eine einfache Lösung gefunden: Sie können kein Partikelformat angeben, aber Sie können es wie folgt anpassen.
Warum nicht das HTML5-Datumssteuerelement so verwenden, wie es ist, mit anderen Attributen, die es ermöglichen, in Browsern zu funktionieren, die den Datumstyp unterstützen, und weiterhin in anderen Browsern wie Firefox, die den Datumstyp noch nicht unterstützen
<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 = "JJJJ-MM-TT" erforderliches Muster = "[0-9] {4} - [0-9] {2} - [0-9 ] {2} "title =" Geben Sie ein Datum in dieses Formular ein JJJJ-MM-TT "/> </ pre>
Paul IE
8
Die Anforderung war eindeutig, ich zitiere - "Ich brauche es im TT-MM-JJJJ-Format." Wie hilft das?
Harijs Krūtainis
1
funktioniert nicht mit Firefox. Dieser HTML-Code zeigt eine Eingabe mit dem Platzhalter MM / TT / JJJJ. Meine Fenster und mein Firefox sind beide mit Niederländisch als Muttersprache eingestellt. Die regionale Windows-Einstellung zeigt das kurze Datum an: 30-11-2018.
Ich weiß das nicht genau, aber ich denke, dass dies vom Browser basierend auf den Datums- / Uhrzeiteinstellungen des Benutzers erledigt werden soll. Versuchen Sie, Ihren Computer so einzustellen, dass Datumsangaben in diesem Format angezeigt werden.
Vielen Dank für dieses Code-Snippet, das möglicherweise sofortige Hilfe bietet. Eine richtige Erklärung würde den Bildungswert erheblich verbessern , indem sie zeigt, warum dies eine gute Lösung für das Problem ist, und sie für zukünftige Leser mit ähnlichen, aber nicht identischen Fragen nützlicher machen. Bitte bearbeiten Sie Ihre Antwort, um eine Erklärung hinzuzufügen, und geben Sie an, welche Einschränkungen und Annahmen gelten.
Toby Speight
1
Ich habe viel recherchiert und ich glaube nicht, dass man das Format des erzwingen kann <input type="date">. Der Browser wählt das lokale Format aus. Abhängig von den Benutzereinstellungen wird das Datum im englischen Format (MM / TT / JJJJ) angezeigt, wenn die Sprache des Benutzers Englisch ist.
Meiner Meinung nach ist die beste Lösung, ein Plugin zur Steuerung der Anzeige zu verwenden.
Ich habe eine etwas andere Antwort gefunden als alles, was ich oben gelesen habe.
Meine Lösung verwendet ein wenig JavaScript und eine HTML-Eingabe.
Das von einer Eingabe akzeptierte Datum führt zu einer Zeichenfolge, die als "JJJJ-MM-TT" formatiert ist. Wir können es teilen und richtig als neues Datum platzieren ().
let userDate = document.getElementById('userDate').value.split('-'),
parsedDate =newDate((`${userDate[1]}-${userDate[2]}-${userDate[0]}`));
Sie können das Datum beliebig formatieren. Sie können ein neues Datum () erstellen und alle Informationen von dort abrufen ... oder einfach 'userDate []' verwenden, um Ihre Zeichenfolge zu erstellen.
Beachten Sie, dass einige Möglichkeiten, wie ein Datum in 'new Date ()' eingegeben wird, zu einem unerwarteten Ergebnis führen. (dh - einen Tag zurück)
Wenn Sie hier HTML-Code veröffentlichen, ist es sehr wichtig, dass Sie ihn als Code formatieren. Wenn Sie dies nicht tun, wird es als Teil der Seite formatiert und Ihre Antwort sieht nicht wie eine Antwort aus. Wenn Sie nicht wissen, wie man formatiert, gibt es eine nette Anleitung in der Hilfe
Zoe
0
Eine kurze direkte Antwort ist nein oder nicht sofort einsatzbereit, aber ich habe eine Methode entwickelt, um ein Textfeld und reinen JS-Code zu verwenden, um die Datumseingabe zu simulieren und ein beliebiges Format zu erstellen. Hier ist der Code
<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- Bitte beachten Sie, dass diese Methode nur für Browser funktioniert, die den Datumstyp unterstützen.
2- Die erste Funktion im JS-Code ist für Browser gedacht, die den Datumstyp nicht unterstützen und das Aussehen auf eine normale Texteingabe einstellen.
3- Wenn Sie diesen Code für mehrere Datumseingaben auf Ihrer Seite verwenden, ändern Sie bitte die ID "xTime" der Texteingabe sowohl im Funktionsaufruf als auch in der Eingabe selbst in etwas anderes und verwenden Sie natürlich den Namen der gewünschten Eingabe für die Formular einreichen.
4-auf der zweiten Funktion können Sie ein beliebiges Format anstelle von Tag + "/" + Monat + "/" + Jahr zum Beispiel Jahr + "/" + Monat + "/" + Tag verwenden und in der Texteingabe einen Platzhalter oder Wert als verwenden JJJJ / MM / TT für den Benutzer beim Laden der Seite.
<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>
Antworten:
Das tust du nicht.
Erstens ist Ihre Frage nicht eindeutig - meinen Sie das Format, in dem sie dem Benutzer angezeigt wird, oder das Format, in dem sie an den Webserver übertragen wird?
Wenn Sie das Format meinen, in dem es dem Benutzer angezeigt wird, liegt dies an der Endbenutzeroberfläche, nicht an irgendetwas, das Sie im HTML angeben. Normalerweise würde ich erwarten, dass es auf dem Datumsformat basiert, das in den Gebietsschemaeinstellungen des Betriebssystems festgelegt ist. Es macht keinen Sinn, zu versuchen, es mit Ihrem eigenen bevorzugten Format zu überschreiben, da das Format, in dem es angezeigt wird, (im Allgemeinen) das richtige für das Gebietsschema des Benutzers und das Format ist, in dem der Benutzer Daten schreibt / versteht.
Wenn Sie das Format meinen, in dem es an den Server übertragen wird, versuchen Sie, das falsche Problem zu beheben. Sie müssen den serverseitigen Code so programmieren, dass Datumsangaben im Format JJJJ-MM-TT akzeptiert werden.
quelle
input[type=password]
heißt es beispielsweise, dass „der Benutzeragent den Wert verdecken sollte, damit andere als der Benutzer ihn nicht sehen können“. Dies ist ebenso eine Präsentation wie die Aussage, dass der Benutzeragent das Datum auf eine bestimmte Weise darstellen sollte.Ich habe die gleiche Frage oder eine verwandte Frage zum Stapelüberlauf gefunden
Ich habe eine einfache Lösung gefunden: Sie können kein Partikelformat angeben, aber Sie können es wie folgt anpassen.
HTML Quelltext:
CSS-Code:
Javascript Code:
Ausgabe:
quelle
Wenn Sie jQuery verwenden, finden Sie hier eine schöne einfache Methode
Oder es gibt den alten traditionellen Weg:
quelle
Warum nicht das HTML5-Datumssteuerelement so verwenden, wie es ist, mit anderen Attributen, die es ermöglichen, in Browsern zu funktionieren, die den Datumstyp unterstützen, und weiterhin in anderen Browsern wie Firefox, die den Datumstyp noch nicht unterstützen
quelle
Ich denke schon, in HTML gibt es keine Syntax für das Format TT-MM-JJJJ. Siehe diese Seite http://www.java2s.com/Code/SQLServer/Date-Timezone/FormatdateMmmddyyyyhhmmdp.htm . Etwas wird es dir helfen. Andernfalls verwenden Sie die Javascript-Datumsauswahl.
quelle
Ich weiß das nicht genau, aber ich denke, dass dies vom Browser basierend auf den Datums- / Uhrzeiteinstellungen des Benutzers erledigt werden soll. Versuchen Sie, Ihren Computer so einzustellen, dass Datumsangaben in diesem Format angezeigt werden.
quelle
quelle
Ich habe viel recherchiert und ich glaube nicht, dass man das Format des erzwingen kann
<input type="date">
. Der Browser wählt das lokale Format aus. Abhängig von den Benutzereinstellungen wird das Datum im englischen Format (MM / TT / JJJJ) angezeigt, wenn die Sprache des Benutzers Englisch ist.Meiner Meinung nach ist die beste Lösung, ein Plugin zur Steuerung der Anzeige zu verwenden.
Jquery DatePicker scheint eine gute Option zu sein, da Sie die Lokalisierung , das Datumsformat ... erzwingen können.
quelle
Ich habe eine etwas andere Antwort gefunden als alles, was ich oben gelesen habe.
Meine Lösung verwendet ein wenig JavaScript und eine HTML-Eingabe.
Das von einer Eingabe akzeptierte Datum führt zu einer Zeichenfolge, die als "JJJJ-MM-TT" formatiert ist. Wir können es teilen und richtig als neues Datum platzieren ().
Hier ist grundlegendes HTML:
Hier ist grundlegende JS:
Sie können das Datum beliebig formatieren. Sie können ein neues Datum () erstellen und alle Informationen von dort abrufen ... oder einfach 'userDate []' verwenden, um Ihre Zeichenfolge zu erstellen.
Beachten Sie, dass einige Möglichkeiten, wie ein Datum in 'new Date ()' eingegeben wird, zu einem unerwarteten Ergebnis führen. (dh - einen Tag zurück)
quelle
quelle
Eine kurze direkte Antwort ist nein oder nicht sofort einsatzbereit, aber ich habe eine Methode entwickelt, um ein Textfeld und reinen JS-Code zu verwenden, um die Datumseingabe zu simulieren und ein beliebiges Format zu erstellen. Hier ist der Code
1- Bitte beachten Sie, dass diese Methode nur für Browser funktioniert, die den Datumstyp unterstützen.
2- Die erste Funktion im JS-Code ist für Browser gedacht, die den Datumstyp nicht unterstützen und das Aussehen auf eine normale Texteingabe einstellen.
3- Wenn Sie diesen Code für mehrere Datumseingaben auf Ihrer Seite verwenden, ändern Sie bitte die ID "xTime" der Texteingabe sowohl im Funktionsaufruf als auch in der Eingabe selbst in etwas anderes und verwenden Sie natürlich den Namen der gewünschten Eingabe für die Formular einreichen.
4-auf der zweiten Funktion können Sie ein beliebiges Format anstelle von Tag + "/" + Monat + "/" + Jahr zum Beispiel Jahr + "/" + Monat + "/" + Tag verwenden und in der Texteingabe einen Platzhalter oder Wert als verwenden JJJJ / MM / TT für den Benutzer beim Laden der Seite.
quelle
Zum Formatieren in MM-TT-JJJJ
aa = date.split ("-")
Datum = aa [1] + '-' + aa [2] + '-' + aa [0]
quelle
Saubere Implementierung ohne Abhängigkeiten. https://jsfiddle.net/h3hqydxa/1/
quelle
Hier ist die Lösung:
hoffentlich wird dies das Problem beheben :)
quelle
Das Format des Datumswerts ist
'YYYY-MM-DD'
. Siehe folgendes BeispielAlles was Sie brauchen, ist das Datum in PHP, Asp, Ruby oder was auch immer zu formatieren, um dieses Format zu haben.
quelle