【问题标题】:How to set date format in HTML date input tag?如何在 HTML 日期输入标签中设置日期格式?
【发布时间】:2011-10-22 03:50:26
【问题描述】:

我想知道是否可以在html<input type="date"></input>标签中设置日期格式...目前是yyyy-mm-dd,而我需要dd-mm-yyyy格式。

【问题讨论】:

标签: html date input format


【解决方案1】:

我想是的,在 HTML 中没有 DD-MM-YYYY 格式的语法。请参阅此页面http://www.java2s.com/Code/SQLServer/Date-Timezone/FormatdateMmmddyyyyhhmmdp.htm。多少会对你有所帮助。否则使用 javascript 日期选择器。

【讨论】:

    【解决方案2】:

    我不确定这一点,但我认为这应该由浏览器根据用户的日期/时间设置来处理。尝试将您的计算机设置为以该格式显示日期。

    【讨论】:

      【解决方案3】:

      如果你使用 jQuery,这里有一个不错的简单方法

      $("#dateField").val(new Date().toISOString().substring(0, 10));
      

      或者还有古老的传统方式:

      document.getElementById("dateField").value = new Date().toISOString().substring(0, 10)
      

      【讨论】:

        【解决方案4】:

        日期值的格式为'YYYY-MM-DD'。看下面的例子

        <form>
        <input value="2015-11-30" name='birthdate' type='date' class="form-control" placeholder="Date de naissance"/>
        </form>
        

        您只需将日期格式化为 php、asp、ruby 或其他任何格式即可。

        【讨论】:

          【解决方案5】:

          我在 stackoverflow 上找到了相同的问题或相关问题

          有没有办法改变输入类型=“日期”的格式?

          我找到了一个简单的解决方案,您不能提供特定格式,但您可以像这样自定义。

          HTML 代码:

              <body>
          <input type="date" id="dt" onchange="mydate1();" hidden/>
          <input type="text" id="ndt"  onclick="mydate();" hidden />
          <input type="button" Value="Date" onclick="mydate();" />
          </body>
          

          CSS 代码:

          #dt{text-indent: -500px;height:25px; width:200px;}
          

          Javascript 代码:

          function mydate()
          {
            //alert("");
          document.getElementById("dt").hidden=false;
          document.getElementById("ndt").hidden=true;
          }
          function mydate1()
          {
           d=new Date(document.getElementById("dt").value);
          dt=d.getDate();
          mn=d.getMonth();
          mn++;
          yy=d.getFullYear();
          document.getElementById("ndt").value=dt+"/"+mn+"/"+yy
          document.getElementById("ndt").hidden=false;
          document.getElementById("dt").hidden=true;
          }
          

          输出:

          【讨论】:

          • 甚至更好 - 使用 css 在常规输入上放置一个透明的日期控件
          • 感谢您的回复,如果您有此链接或代码,我需要更新
          • 这是一个不错的选择。
          • 我认为他在问是否可以使用 HTML(基于问题),而不是 CSS 或 Javascript。
          【解决方案6】:

          为什么不按原样使用 html5 日期控件,它的其他属性允许它在支持日期类型的浏览器上正常工作,并且仍然可以在其他浏览器(如尚未支持日期类型的 firefox)上工作

          <input type="date" name="input1" placeholder="YYYY-MM-DD" required pattern="[0-9]{4}-[0-9]{2}-[0-9]{2}" title="Enter a date in this formart YYYY-MM-DD"/>
          

          【讨论】:

          • 要求显然是,我引用 - “我需要 dd-mm-yyyy 格式。”这有什么帮助?
          • 不适用于 Firefox。此 html 显示带有占位符 mm/dd/yyyy 的输入。我的 windows 和 firefox 都设置为荷兰语作为第一语言。 Windows 区域设置显示短日期:30-11-2018。
          【解决方案7】:

          干净的实现,没有依赖关系。 https://jsfiddle.net/h3hqydxa/1/

            <style type="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>
          
            <input class="dateField" id="dateField" type="date"></input>
            <div id="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 stuff
                if (dateField.value.length < 1) {
                  return;
                }
          
                var date = new Date(dateField.value);
                var day = date.getUTCDate();
                var month = date.getUTCMonth() + 1; //zero-based month values
                fakeDateField.innerHTML = (month < 10 ? "0" : "") + month + " / " + day;
              });
          
            </script>
          

          【讨论】:

            【解决方案8】:
            $('input[type="date"]').change(function(){
               alert(this.value.split("-").reverse().join("-")); 
            });
            

            【讨论】:

            • 感谢您提供此代码 sn-p,它可能会提供一些即时帮助。一个正确的解释would greatly improve 其教育价值通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有类似但不相同的问题的读者更有用。请edit您的答案添加解释,并说明适用的限制和假设。
            【解决方案9】:

            我做了很多研究,我认为不能强制使用&lt;input type="date"&gt; 的格式。 浏览器选择本地格式,根据用户设置,如果用户语言为英文,则日期显示为英文格式(mm/dd/yyyy)。

            在我看来,最好的解决方案是使用插件来控制显示。

            Jquery DatePicker 似乎是一个不错的选择,因为您可以强制使用 localization、date format ...

            【讨论】:

              【解决方案10】:

              简短的直接答案是没有或没有开箱即用,但我想出了一种方法来使用文本框和纯 JS 代码来模拟日期输入并做任何你想要的格式,这里是代码

              <html>
              <body>
              date : 
              <span style="position: relative;display: inline-block;border: 1px solid #a9a9a9;height: 24px;width: 500px">
                  <input type="date" class="xDateContainer" onchange="setCorrect(this,'xTime');" style="position: absolute; opacity: 0.0;height: 100%;width: 100%;"><input type="text" id="xTime" name="xTime" value="dd / mm / yyyy" style="border: none;height: 90%;" tabindex="-1"><span style="display: inline-block;width: 20px;z-index: 2;float: right;padding-top: 3px;" tabindex="-1">&#9660;</span>
              </span>
              <script language="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 format
              function setCorrect(xObj,xTraget){
                  var date = new Date(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- 如果您将此代码用于页面中的多个日期输入,请在函数调用和输入本身中将文本输入的 ID“xTime”更改为其他内容,当然使用您输入的名称想要表单提交。

              4-在第二个函数中,你可以使用任何你想要的格式来代替 day+" / "+month+" / "+year 例如 year+" / "+month+" / "+day 并且在文本输入中使用一个占位符或页面加载时用户的值为 yyyy / mm / dd。

              【讨论】:

                【解决方案11】:

                我想出的答案与我读过的上述任何内容略有不同。

                我的解决方案使用了少量的 JavaScript 和一个 html 输入。

                输入接受的日期会生成格式为“yyyy-mm-dd”的字符串。我们可以将其拆分并正确放置为 new Date()。

                这是基本的 HTML:

                <form id="userForm">
                    <input type="text" placeholder="1, 2, 3, 4, 5, 6" id="userNumbers" />
                    <input type="date" id="userDate" />
                    <input type="submit" value="Track" />
                </form>
                

                这是基本的 JS:

                let userDate = document.getElementById('userDate').value.split('-'),
                    parsedDate = new Date((`${userDate[1]}-${userDate[2]}-${userDate[0]}`));
                

                您可以随意设置日期格式。你可以创建一个新的 Date() 并从那里获取所有信息......或者简单地使用 'userDate[]' 来构建你的字符串。

                请记住,将日期输入“new Date()”的某些方式会产生意想不到的结果。 (即 - 落后一天)

                【讨论】:

                  【解决方案12】:

                  mm-dd-yyyy 中的格式化:

                   aa = date.split("-")
                  
                   date = aa[1]+'-'+aa[2]+'-'+aa[0]
                  

                  【讨论】:

                    【解决方案13】:

                    这是一种选择。当用户输入日期时,该函数会重新格式化它。当他们单击提交按钮时,它会以您要查找的格式填充结果div。

                    <div id="result"></div>
                    <p>Enter some text:
                    <input type="date" name="txt" id="datefield" onchange="dateval(value)"></p>
                    <button onclick="postdate()">submit</button>
                    
                    <script>
                    var a;
                    
                    // Set the *value* of the input element to
                    // yyyy-mm-dd (text is unchanged)
                    function dateval(val) {
                        var dv = document.getElementById("datefield");
                        a = val.split("-").reverse().join("-");
                        dv.type = "text";
                        dv.value = a;
                    }
                    
                    // Extract the yyyy-mm-dd value from the inpuut element,
                    // format it to dd-mm-yyyy and put it in the div
                    function postdate() {
                        var dv = document.getElementById("datefield");
                        var z = a.split("-").reverse().join("-");
                        document.getElementById("result").innerHTML = a;
                        dv.type = "date";
                        dv.value = z;
                    }
                    </script>
                    

                    【讨论】:

                    • 当您在此处发布 HTML 代码时,将其格式化为代码非常重要。如果您不这样做,它将被格式化为页面的一部分,并且您的答案看起来不像答案。如果你不知道如何格式化,there's a nice guide on it in the help center
                    • 这是一个创造性的解决方案,但它不是很防弹,并且在值恢复时有一些古怪的行为
                    【解决方案14】:

                    解决方法如下:

                      <input type="text" id="end_dt"/>
                    
                    $(document).ready(function () {
                        $("#end_dt").datepicker({ dateFormat: "MM/dd/yyyy" });
                    });
                    

                    希望这能解决问题:)

                    【讨论】:

                    • 您的解决方案没有使用日期类型的 HTML 输入,因此没有真正回答问题。
                    • 您不需要将其类型设置为日期。对于 datepicker 它将在没有日期的情况下工作。试试吧,希望它能解决你的问题。
                    【解决方案15】:

                    我们可以在javascript中使用split方法将这个yyyy-mm-dd格式改成dd-mm-yyyy。

                    let dateyear= "2020-03-18";
                    let arr = dateyear.split('-') //now we get array of these and we can made in any format as we want
                    let dateFormat = arr[2] + "-" + arr[1] + "-" + arr[0]  //In dd-mm-yyyy format
                    

                    【讨论】:

                      猜你喜欢
                      • 2015-09-03
                      • 2013-12-15
                      • 1970-01-01
                      • 1970-01-01
                      • 2020-03-22
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多