首页 文章

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

提问于
浏览
589

我在我的网页上使用HTML5元素 . 默认情况下,输入 type="date" 将日期显示为 YYYY-MM-DD .

问题是,是否可以将其格式更改为: DD-MM-YYYY

15 回答

  • 5

    Browsers obtain the date-input format from user's system date format.

    (在支持的浏览器,Chrome,Edge中测试 . )

    由于目前没有规范定义的标准来改变日期控制的风格,因此无法在浏览器中实现相同的标准 .

    但是,从系统设置获取日期格式的这种行为更好,我强烈建议,我们不应该尝试覆盖它 . 原因是,用户将看到日期输入的格式与他们在系统/设备中配置的格式相同,并且他们感到满意或与他们的区域设置匹配 .

    请记住,这只是屏幕上用户看到的UI格式,在您的javascript / backend中,您始终可以保留所需的格式 .

    Refer google developers page on same.

  • 502

    谷歌Chrome在其上一个测试版中最终使用输入 type=date ,格式为 DD-MM-YYYY .

    因此必须有一种强制特定格式的方法 . 我正在开发一个HTML5网页,日期搜索现在以不同的格式失败 .

  • 3

    经过多次跨栏后,我想出了一个允许更改格式的解决方案 . 有一些注意事项,但如果您希望始终显示“Jan”或“01”,则可以使用它 . 它仅适用于Windows和Mac上的Chrome,因为Firefox根本不支持原生日期选择器 .

    https://github.com/northamerican/custom-input-date-format

    JS:

    function updateDateInputs() { 
        $('input').each(function() {
            var $date = $(this),
                date = $date.val().split('-'),
                format = ['year', 'month', 'day'];
            $.each(format, function(i, v) {
                $date.attr('data-' + v, +date[i]);
            });
        });
    }
    

    上海社会科学院:

    $months: '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12';
    @each $month in $months {
        $i: index($months, $month);
    
        input[data-month="#{$i}"][data-style="reg"]::-webkit-datetime-edit-month-field:after { 
            content: "#{$month}";
        }
    }
    
  • 109

    它's not possible to change web-kit browsers use user'的计算机或手机默认日期格式 . 但是如果你可以使用jquery和jquery UI,那么有一个可设计的日期选择器,可以按照开发人员的需要以任何格式显示 . jquery UI日期选择器的链接在此页面http://jqueryui.com/datepicker/您可以找到演示以及代码和文档或文档链接

    编辑: - 我发现chrome使用的语言设置默认等于系统设置,但用户可以更改它们但开发人员不能强制用户这样做,所以你必须使用其他js解决方案,比如我告诉你可以搜索网页使用javascript日期选择器或jquery日期选择器等查询

  • 13

    如前所述,正式无法更改格式 . 然而,可以为该字段设置样式,因此(使用一点JS帮助)它以我们想要的格式显示日期 . 操作日期输入的一些可能性以这种方式丢失,但如果强制格式的愿望更大,则此解决方案可能是一种方式 . 日期字段只保留:

    <input type="date" data-date="" data-date-format="DD MMMM YYYY" value="2015-08-09">
    

    剩下的就是CSS和JS:http://jsfiddle.net/g7mvaosL/

    它适用于桌面版Chrome和iOS上的Safari(特别理想,因为触摸屏上的原生日期操纵器是无与伦比的恕我直言) . 没有检查其他人,但不要指望在任何Webkit上失败 .

  • 0

    在阅读了大量讨论之后,我准备了一个简单的解决方案,但我不想使用大量的Jquery和CSS,只需要一些javascript .

    HTML代码:

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

    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;
    }
    

    输出:

    enter image description here

  • -5

    由于这个问题被问到网络领域发生了很多事情,其中最令人兴奋的是web components的登陆 . 现在,您可以使用custom HTML5 element优雅地解决此问题,以满足您的需求 . 如果您希望覆盖/更改任何html标记的工作方式,只需构建您使用阴影dom .

    好消息是已经有很多可用的样板,所以很可能你不需要从头开始提出解决方案 . 只是check人们正在建设什么并从那里获得想法 .

    您可以从一个简单(和工作)的解决方案开始,例如datetime-input聚合物,它允许您使用这样的标签:

    <date-input date="{{date}}" timezone="[[timezone]]"></date-input>
    

    或者你可以获得创意和弹出式完整的日期选择styled as you wish,你想要的格式和区域设置,回调和你的长选项列表(你有一个完整的自定义API供你使用!)

    Standards-compliant, no hacks.

    仔细检查available polyfills,他们支持的是什么browsers/versions,如果它覆盖了足够的用户群%...那么's 2018, so chances are it'肯定会覆盖大部分用户 .

    希望能帮助到你!

  • 1

    如上所述, <input type=date ... > 并没有在大多数浏览器中完全实现,所以让我们谈谈webkit之类的浏览器(chrome) .

    使用linux,您可以通过更改环境变量 LANG 来改变它, LC_TIME 似乎不起作用(至少对我来说) .

    您可以在终端中键入 locale 以查看当前值 . 我认为同样的概念可以应用于IOS .

    例如:使用:

    LANG=en_US.UTF-8 /opt/google/chrome/chrome
    

    日期显示为 mm/dd/yyyy

    使用:

    LANG=pt_BR /opt/google/chrome/chrome
    

    日期显示为 dd/mm/yyyy

    您可以使用http://lh.2xlibre.net/locale/pt_BR/(根据您的语言环境更改 pt_BR )来创建自己的自定义区域设置并根据需要设置日期格式 .

    关于更改默认系统日期的更好的更高级参考:https://ccollins.wordpress.com/2009/01/06/how-to-change-date-formats-on-ubuntu/https://askubuntu.com/questions/21316/how-can-i-customize-a-system-locale

    您可以使用 date 查看实际的当前日期格式:

    $ date +%x
    01-06-2015
    

    但由于 LC_TIMEd_fmt 似乎被拒绝了chrome(我认为它是webkit或chrome中的一个bug),遗憾的是 it don't work . :'(

    所以,不幸的是响应,是IF LANG 环境变量没有解决你的问题,还没有办法 .

  • -3

    It is impossible to change the format

    我们必须区分有线格式和浏览器的演示格式 .

    Wire format HTML5 date input specification指的是RFC3339 specification,它指定的全日期格式等于:yyyy-mm-dd . 有关更多详细信息,请参阅RFC3339规范的section 5.6 .

    Presentation format 浏览器在呈现日期输入方面不受限制 . 在撰写Chrome时,Edge,Firefox和Opera都有日期支持(参见here) . 它们都显示日期选择器并在输入字段中格式化文本 .

    输入字段文本的格式只能在Chrome中正确完成 . Edge,Firefox和Opera以正确的顺序显示日期,日期,月份和年份,但不一致地使用斜杠( 30/01/2018 ),例如,区域设置的日历格式需要破折号( 30-01-2018 ) .

    Internet Explorer 9,10和11显示带有线格式的文本输入字段 .

  • 63

    我知道这是一个老帖子,但它是谷歌搜索中的第一个建议,简答案没有,建议回答用户自定义日期的旅行者,我使用的正确答案是使用文本框来模拟日期输入,并做任何你想要的格式,这是代码

    <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 - 在第二个功能上你可以使用你想要的任何格式而不是日“/”月“/”年例如年“/”月“/”日,并在文本输入中使用占位符或值作为yyyy / mm / dd为页面加载时的用户 .

  • 43
    function dmy() {
      var mydate = document.getElementById('dat').value;
      //alert(mydate);
      var yf = mydate.split("-")[0];
      var mf = mydate.split("-")[1];
      var df = mydate.split("-")[2];
    
      var b = localStorage.getItem("b");
      if (!b) {
        b = [];
      } else {
        b = JSON.parse(b);
    
      }
      b.push({
        df: df,
        mf: mf,
        yf: yf
      });
    
      localStorage.setItem("b", JSON.stringify(b));
    }
    
    function showdate() {
      var sdate = JSON.parse(localStorage.getItem('b'));
      var a = '';
      if (sdate != null) {
        for (var i = 0; i < sdate.length; i++) {
          a += sdate[i]['df'] + '/' + sdate[i]['mf'] + '/' + sdate[i]['yf'] + '<br>';
    
        }
      } else {
        a = 'No DATA';
      }
      document.getElementById('conversion').innerHTML = a;
    }
    
    <form onsubmit=dmy()>
      <input type="date" name="dat" id="dat">
      <input type="submit" value="submit">
    </form>
    <input type="button" value="convert" onclick=showdate()>
    <div id="conversion"></div>
    
  • 0

    我相信浏览器将使用本地日期格式 . 不要以为可以改变 . 您当然可以使用自定义日期选择器 .

  • 10

    HTML5日期选择器的格式取决于服务器机器日期时间格式的格式 .

    因此,您可以通过在任务栏中更改部署服务器上的格式来更改它 .

  • 2

    It's important to distinguish two different formats

    • RFC 3339 / ISO 8601 "wire format":YYYY-MM-DD . 根据HTML5规范,这是在表单提交时或通过DOM API请求时必须用于输入值的格式 . 它是区域和区域独立的 .

    • 用户界面控件显示的格式,并作为用户输入接受 . 鼓励浏览器供应商遵循用户的首选项选择 . 例如,在语言和文本首选项窗格中选择了区域"United States"的Mac OS上,Chrome 20使用的格式为"m/d/yy" .

    HTML5规范不包括任何覆盖或手动指定任一格式的方法 .

  • 9

    Try 如果你需要一个 quick solution 要使yyyy-mm-dd去"dd- Sep -2016"

    1)在输入附近创建一个span类(充当标签)

    2)每次用户更改日期或需要从数据加载时更新标签 .

    _111499_和IE11的指针事件需要jQuery和Jquery Date

    $("#date_input").on("change", function () {
         $(this).css("color", "rgba(0,0,0,0)").siblings(".datepicker_label").css({ "text-align":"center", position: "absolute",left: "10px", top:"14px",width:$(this).width()}).text($(this).val().length == 0 ? "" : ($.datepicker.formatDate($(this).attr("dateformat"), new Date($(this).val()))));
            });
    
    #date_input{text-indent: -500px;height:25px; width:200px;}
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
    <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.min.js"></script>
    <input id ="date_input" dateformat="d M y" type="date"/>
    <span class="datepicker_label" style="pointer-events: none;"></span>
    

相关问题