有什么方法可以更改输入 type=“date” 格式吗?

Is there any way to change input type="date" format?

提问人:Tural Ali 提问时间:9/10/2011 最后编辑:Tural Ali 更新时间:8/30/2023 访问量:2102652

问:

默认情况下,输入将日期显示为 。type="date"YYYY-MM-DD

问题是,是否有可能强制它的格式如下:?DD-MM-YYYY

HTML CSS 日期 输入

评论

13赞 Endy Tjahjono 10/2/2015
Google 为 Chrome 创建了一个常见问题解答:developers.google.com/web/updates/2012/08/...因此,格式基于操作系统的区域设置。
9赞 Ali 4/23/2020
我浪费时间试图做到这一点.只需使用另一个库,如 moment 或 jQuery datepickerdd/mm/yyyy
7赞 Abel Callejo 8/25/2021
如果有人正在寻找快速修复方法,例如添加属性。规格中没有这样的东西。format="yyyy-mm-dd"
4赞 Viktor Brešan 8/28/2021
是否可以重载 HTMLInputElement 以为其提供不同的语言环境?请在这里检查我的问题:stackoverflow.com/q/68536503/96313
0赞 andreszs 9/29/2021
Firefox添加了一个选项,可以使用操作系统的语言环境来显示日期,请查看我的答案。我知道它不能解决根本问题,但对于开发人员来说是一个不错的选择。

答:

18赞 Michael Mior 9/10/2011 #1

我相信浏览器会使用本地日期格式。不要以为这是可以改变的。当然,您可以使用自定义日期选择器。

评论

1赞 Govindarao Kondala 10/11/2011
本地日期格式是指我们的手机默认日期格式或位置日期格式?
2赞 Michael Mior 10/11/2011
取决于您使用的移动浏览器。但我怀疑这将是手机的默认设置。
3赞 RobG 5/19/2016
“本地”格式是指基于地理位置,这可能是确定日期格式的最糟糕方法。去欧洲旅行的美国人会希望他们的智能手机开始以 24 小时格式显示时间,日期显示为 yyyy-mm-dd 或 dd/mm/yyyy 吗?反之亦然,对于在美国的欧洲人来说?
799赞 David Walschots 3/1/2012 #2

无法更改格式

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

线材格式

HTML5 日期输入规范是指 RFC 3339 规范,该规范指定了等于:的完整日期格式。有关详细信息,请参阅 RFC 3339 规范的第 5.6 节yyyy-mm-dd

此格式由 HTML 属性和 DOM 属性使用,并且是执行普通表单提交时使用的格式。value

演示格式

浏览器在显示日期输入的方式上不受限制。在撰写本文时,Chrome、Edge、Firefox 和 Opera 都支持日期(请参阅此处)。它们都显示一个日期选取器,并在输入字段中设置文本格式。

桌面设备

对于 Chrome、Firefox 和 Opera,输入字段文本的格式基于浏览器的语言设置。对于 Edge,它基于 Windows 语言设置。可悲的是,所有 Web 浏览器都忽略了操作系统中配置的日期格式。对我来说,这是非常奇怪的行为,在使用这种输入类型时需要考虑一些因素。例如,将显示其操作系统或浏览器语言设置为的荷兰用户,而不是他们习惯的格式:。en-us01/30/201930-01-2019

Internet Explorer 9、10 和 11 显示线路格式的文本输入字段。

移动设备

专门针对 Android 上的 Chrome,格式基于 Android 显示语言。我怀疑其他浏览器也是如此,尽管我无法验证这一点。

评论

8赞 David Walschots 1/30/2013
@AllanKimmerJensen虽然我理解你的想法。我相信使用 RFC3339 中指定的格式的决定是正确的,因为它不会在 HTML 和 JavaScript 之间产生耦合。至于你的第二点,我觉得从可用性的角度来看,用户根据他的区域偏好查看日历是有意义的。
29赞 iurisilvio 1/27/2015
如果应用程序pt_BR,我希望pt_BR输入。我的系统设置无关紧要。HTML5 需要某种方法来强制执行语言环境。
13赞 Luke H 8/31/2015
由于我在西班牙,我使用西班牙语语言环境进行日期/货币设置,但我的第一语言是英语,我习惯了美国键盘布局,所以我使用英语/美国键盘。我的客户是讲法语的欧洲人......我希望我能提示 Chrome 等停止以美国 mm-dd-yyyy 格式显示日期!
95赞 boh 6/10/2016
多么无用的组件,到底是谁想出这个规格的?
2赞 andreszs 9/29/2021
现在可以通过“设置”面板将显示格式设置为与Firefox中的操作系统区域设置相匹配,请查看我的答案了解详细信息。Chrome 现在应该(或可以)添加此选项。
12赞 Turamarth 6/16/2012 #3

Google Chrome浏览器在其上一个测试版中最终使用了输入,格式为。type=dateDD-MM-YYYY

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

评论

25赞 David Walschots 8/22/2012
您提到的 DD-MM-YYYY 格式可能是您当地的日历格式。对网站访问者强制使用特定格式是不明智的(据我所知,在当前的 HTML5 标准中是不可能的),因为他们可能习惯于与您强加给他们的日历格式不同的日历格式。
4赞 Tilt 6/27/2014
您指的是演示格式,因为如果您尝试读取 input.val(),无论演示格式如何,google chrome (v35) 都会以 yyyy-mm-dd 格式返回日期;)
10赞 user275801 9/24/2018
@DavidWalschots,如果美国人能意识到将迟钝的 MDY 格式强加给世界其他地区是多么不明智。
0赞 David Walschots 9/25/2018
@user275801 虽然我同意这是一种奇怪的格式。我没有看到美国人把它强加给别人。:-)M-D-Y
5赞 user275801 10/8/2018
@DavidWalschots我见过的大多数软件和操作系统都要求您“选择退出”美国 m-d-y 格式。从这个意义上说,它实际上是“被迫的”。事实上,我的 linux 具有澳大利亚的所有区域设置,但我的浏览器(如果可以这样称呼的话,它是一种美国浏览器)仍然自行以 m-d-y 格式显示所有日期,在这种情况下,我无法“选择退出”。
61赞 John 7/10/2012 #4

区分两种不同的格式很重要

  • RFC 3339/ISO 8601“线格式”:YYYY-MM-DD。根据 HTML5 规范,这是在表单提交时或通过 DOM API 请求时必须用于输入值的格式。它与区域设置和区域无关。
  • 用户界面控件显示并接受为用户输入的格式。鼓励浏览器供应商遵循用户的首选项选择。例如,在“语言与文本”偏好设置面板中选择“美国”区域的 Mac OS 上,Chrome 20 使用格式“m/d/yy”。

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

评论

3赞 Flimm 8/17/2017
该属性是否与连线格式匹配,或者是否与向用户显示的内容匹配?value
5赞 David Walschots 3/3/2018
@Flimm该属性始终与连线格式匹配。value
5赞 andreszs 9/29/2021
W3C 每十年添加一次新控件,但他们没有考虑不同的显示区域设置......我真的很想在那里工作,因为什么都不做而获得报酬!
4赞 Ravinder Payal 6/4/2014 #5

无法更改 web-kit 浏览器使用用户计算机或手机的默认日期格式。 但是,如果你可以使用jquery和jquery UI,那么有一个日期选择器,它是可设计的,可以按照开发人员想要的任何格式显示。 jquery UI 日期选择器的链接是 在此页面上 http://jqueryui.com/datepicker/ 您可以找到演示以及代码和文档或文档链接

编辑:-我发现chrome使用的语言设置默认与系统设置相同,但用户可以更改它们,但开发人员不能强迫用户这样做,因此您必须使用其他js解决方案,例如我告诉您可以使用javascript日期选择器或jquery日期选择器等查询来搜索网络

6赞 ton 6/1/2015 #6

如前所述,在大多数浏览器中都没有完全实现,所以让我们谈谈像浏览器(chrome)一样的webkit。<input type=date ... >

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

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

例如: 用:

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

但是似乎被 chrome 拒绝了(我认为这是 webkit 或 chrome 中的错误),可悲的是它不起作用。:'(LC_TIMEd_fmt

所以,不幸的是,回应是,如果环境变量不能解决你的问题,还没有办法。LANG

评论

0赞 lepe 8/17/2015
+1 太棒了!使用:为我做了诀窍。它也适用于 Vivaldi,我想也适用于其他浏览器。谢谢!LANG=ja_JP.UTF-8 chromium-browser
7赞 Miguel 6/23/2015 #7

如果您需要快速解决方案请尝试此操作 使 yyyy-mm-dd 转到“dd- Sep -2016”

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

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

适用于 webkit 浏览器手机和 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>

评论

4赞 RobG 5/19/2016
这不能回答问题,需要 2 个库,这两个库都没有标记或要求。它也不允许手动输入日期。
0赞 Miguel 5/19/2016
它没有被要求改变,只是显示格式......您可以将其作为预览来执行,并使用带有更改事件的输入来更新格式。
112赞 pmucha 7/1/2015 #8

如前所述,官方无法更改格式。但是,可以设置字段的样式,因此(在一些 JS 的帮助下)它以我们想要的格式显示日期。以这种方式丢失了操作日期输入的一些可能性,但如果强制格式的愿望更大,则此解决方案可能是一种方式。日期字段仅保持如下状态:

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

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

$("input").on("change", function() {
    this.setAttribute(
        "data-date",
        moment(this.value, "YYYY-MM-DD")
        .format( this.getAttribute("data-date-format") )
    )
}).trigger("change")
input {
    position: relative;
    width: 150px; height: 20px;
    color: white;
}

input:before {
    position: absolute;
    top: 3px; left: 3px;
    content: attr(data-date);
    display: inline-block;
    color: black;
}

input::-webkit-datetime-edit, input::-webkit-inner-spin-button, input::-webkit-clear-button {
    display: none;
}

input::-webkit-calendar-picker-indicator {
    position: absolute;
    top: 3px;
    right: 0;
    color: black;
    opacity: 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<input type="date" data-date="" data-date-format="DD MMMM YYYY" value="2015-08-09">

它在桌面版 Chrome 和 iOS 版 Safari 上运行良好(特别可取,因为触摸屏上的本机日期操纵器是无与伦比的恕我直言)。没有检查其他人,但不要指望在任何 Webkit 上失败。

评论

2赞 Can O' Spam 8/21/2015
这是行不通的,你改成,只有改动。-1 为此,对不起MMMM YYYY DDDD
4赞 pmucha 9/11/2015
@SamSwift - 更改值后是否单击了“运行”?;)
12赞 pmucha 6/8/2016
不,他不是。你不明白它是如何工作的:你玩 JS,你应该玩 HTML。您已经更改了函数的输入格式,这不是要走的路。你应该改变,然后你会得到 09-2015-08,这是正确的结果。momentdata-date-format="DD-YYYY-MM"
5赞 MaxZoom 4/27/2018
在 Safari、Edge、Opera 中都不起作用 - 这使得它无法使用
12赞 Alexander Lallier 10/3/2018
在Firefox中损坏
185赞 sdude 8/22/2015 #9

自从这个问题被问到以来,Web领域发生了很多事情,其中最令人兴奋的是Web组件的登陆。现在,您可以使用专为满足您需求而设计的自定义 HTML5 元素优雅地解决此问题。如果你想覆盖/改变任何html标签的工作原理,只需使用shadow dom构建你的标签。

好消息是,已经有很多可用的样板,所以很可能你不需要从头开始想出一个解决方案。只需检查人们正在构建的内容并从那里获得想法即可。

你可以从一个简单(且有效)的解决方案开始,比如 datetime-input for polymer,它允许你使用这样的标签:

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

或者,您可以根据需要获得创意和弹出式的完整日期选择器,其中包含您想要的格式和区域设置、回调和一长串选项(您可以使用整个自定义 API!

符合标准,无黑客攻击。

仔细检查可用的 polyfills,它们支持哪些浏览器/版本,以及它是否覆盖了足够多的用户群......现在是 2018 年,所以它肯定会覆盖您的大多数用户。

希望对你有所帮助!

评论

0赞 Sam Hasler 8/24/2015
但是这些都可以本地化吗?即将月份名称更改为非英语。它们可以在桌面和移动设备上运行吗?
0赞 sdude 8/25/2015
当然,它们是可本地化的。您可以利用系统的语言环境(即:is.gd/QSkwAY)或在 web组件(即:is.gd/Ru9U82)中提供您的 i18n 文件。至于移动浏览器,它们支持使用 polyfills,尽管还不是 100%......检查我发布的浏览器/版本链接。同样,这是最前沿的。如果你是前瞻性的,这是一个很好的解决方案。
0赞 Sam Hasler 8/27/2015
对不起,我没有看到你的最新评论。这:jcrowther.io/2015/05/11/i18n-and-web-components 看起来很有用,应该包含在答案中。
56赞 Mark Amery 1/17/2020
尽管有 100 多人显然不同意,但在我看来,这个答案并没有增加任何有用的东西。没有给出为什么 Web 组件(而不是为网页创建可重用小部件的任何其他方式)应该在这里选择解决方案的理由,至少提出的第一个组件有点垃圾(没有日历弹出窗口,如果我输入一个太大的数字,例如一天,一些疯狂的行为)。此外,您实际上从未展示如何使用任何建议的组件设置自定义日期格式,这意味着最终这并不能回答所提出的问题。
5赞 Karel Bílek 1/20/2021
“自定义 HTML5 元素”链接不起作用
8赞 ashish bhatt 9/2/2015 #10

在阅读了大量讨论之后,我准备了一个简单的解决方案,但我不想使用大量的 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

9赞 Rahul R. 5/27/2018 #11

浏览器从用户的系统日期格式中获取日期输入格式。

(在支持的浏览器、Chrome、Edge 和 Firefox 中进行了测试。

由于规范目前没有定义标准来更改日期控件的样式,因此~不可能在浏览器中实现相同的标准。

用户可以在 input[type=date] 的文本字段中键入日期值,日期格式在框中显示为灰色文本。此格式是从操作系统的设置中获取的。Web 作者无法更改日期格式,因为目前没有指定格式的标准。

因此,无需更改它,如果我们不更改任何内容,用户将看到日期输入的格式与他们在系统/设备设置中配置的格式相同,并且他们熟悉或匹配他们的区域设置。

请记住,这只是用户看到的屏幕上的 UI 格式,在您的 JavaScript/后端中,您始终可以保留所需的格式以供使用。

在 Windows 上更改系统日期格式:要更改Windows 10或更高版本上的系统日期格式,请转到“开始”菜单 -->日期和时间设置 -->日期,时间和区域格式-->更改区域格式(附图)。

更改格式后,您可能需要刷新页面或重新启动浏览器。enter image description here

如果上述方法不起作用,您可以在 chrome 中尝试以下操作:

要更改 Chrome 中的格式(例如,从美国“MM/DD/YYYY”更改为 “DD/MM/YYYY”),你去>设置>高级>添加语言(选择 英语英国)。然后:chrome settings relaunch浏览器 重新启动,您将找到如下日期输入字段: ´25/01/2022

请参阅谷歌开发人员页面。

WHATWG git hub 查询相同

使用以下日期输入进行测试:

<input type="date" id="dob" value=""/>

评论

8赞 Maris Mols 12/25/2020
对我来说,这是行不通的。我的 Windows 设置格式为 d.m.Y,但浏览器显示 m/d/Y。
0赞 Rahul R. 12/28/2020
这是哪个浏览器,版本是什么?
0赞 Maris Mols 12/29/2020
我使用Chrome
0赞 Rahul R. 12/30/2020
根据文档,情况不应该如此,只需检查版本并确保其最新版本,如果是最新的,则可以针对 chrome 打开错误
1赞 Sri 4/29/2021
您需要清除浏览器缓存或使用隐身窗口。
-1赞 shady 9/22/2018 #12

我知道这是一篇旧帖子,但它是谷歌搜索中的第一个建议,简答不,推荐答案用户自定义日期戳,我使用的正确答案是使用文本框来模拟日期输入并执行您想要的任何格式,这是代码

<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 在页面加载时为用户。

2赞 Hezbullah Shah 9/16/2019 #13

由于该帖子在 2 个月前处于活动状态。所以我想也提供我的意见。

就我而言,我从读卡器收到日期,该读卡器采用 dd/mm/yyyy 格式。

我是做什么的。 例如

var d="16/09/2019" // date received from card
function filldate(){
    document.getElementById('cardexpirydate').value=d.split('/').reverse().join("-");
    }
<input type="date" id="cardexpirydate">
<br /><br />
<input type="button" value="fill the date" onclick="filldate();">

代码的作用:

  1. 它根据“/”拆分我得到的日期为 dd/mm/yyyy(使用 split())并制作一个数组,
  2. 然后它反转数组(使用 reverse()),因为日期输入支持反转 我得到的。
  3. 然后它根据(使用 join())将数组连接到字符串中 输入字段所需的格式

所有这些都是在一行中完成的。

我认为这会对一些人有所帮助,所以我写了这篇文章。

评论

2赞 Mark Amery 1/17/2020
这并不能解决提出的问题;您在此处分析的是自定义格式,而不是更改用于显示值的格式。<input>
25赞 user7219771 12/7/2019 #14

我找到了一种更改格式的方法,这是一种棘手的方法,我只是仅使用CSS代码更改了日期输入字段的外观。

input[type="date"]::-webkit-datetime-edit, input[type="date"]::-webkit-inner-spin-button, input[type="date"]::-webkit-clear-button {
  color: #fff;
  position: relative;
}

input[type="date"]::-webkit-datetime-edit-year-field{
  position: absolute !important;
  border-left:1px solid #8c8c8c;
  padding: 2px;
  color:#000;
  left: 56px;
}

input[type="date"]::-webkit-datetime-edit-month-field{
  position: absolute !important;
  border-left:1px solid #8c8c8c;
  padding: 2px;
  color:#000;
  left: 26px;
}


input[type="date"]::-webkit-datetime-edit-day-field{
  position: absolute !important;
  color:#000;
  padding: 2px;
  left: 4px;
  
}
<input type="date" value="2019-12-07">

评论

5赞 Shoaib 11/14/2020
它不能在firefox浏览器中工作。有没有办法通过在Firefox中工作的CSS处理日期格式?
0赞 Stefan27 6/1/2021
@safi感谢 eddine - 如果有人正在对此进行自定义样式,您可以使用 - 删除 dd input[type=“date”]::-webkit-datetime-edit-text { color: transparent;input[type="date"]::-webkit-datetime-edit-text
0赞 Webfeya 9/28/2023
谢谢!我找到了另一种从 / 更改为 .(点): input[type=“date”] {position:relative; input[type=“date”]::-webkit-datetime-edit-text {background:#333; width:2px; height:2px; margin:0 1px 0 0; display:inline-block; overflow:hidden;} input[type=“date”]::-webkit-datetime-edit-day-field {position:relative; left:-20px;} input[type=“date”]::-webkit-datetime-edit-month-field {position:relative; left:20px;}
13赞 Ali 4/23/2020 #15

我在 2 年前搜索了这个问题,我的谷歌搜索再次将我引向了这个问题。 不要浪费时间尝试使用纯 JavaScript 来处理这个问题。我浪费了时间试图做到这一点.没有适合所有浏览器的完整解决方案。因此,我建议使用 momentJS / jQuery datepicker 或告诉您的客户端使用默认日期格式dd/mm/yyyy

2赞 A3IOU 2/9/2021 #16

我调整了 Miguel 的代码,使其更容易理解 我想与像我一样有问题的人分享。

试试这个简单快捷的方法

$("#datePicker").on("change", function(e) {

  displayDateFormat($(this), '#datePickerLbl', $(this).val());

});

function displayDateFormat(thisElement, datePickerLblId, dateValue) {

  $(thisElement).css("color", "rgba(0,0,0,0)")
    .siblings(`${datePickerLblId}`)
    .css({
      position: "absolute",
      left: "10px",
      top: "3px",
      width: $(this).width()
    })
    .text(dateValue.length == 0 ? "" : (`${getDateFormat(new Date(dateValue))}`));

}

function getDateFormat(dateValue) {

  let d = new Date(dateValue);

  // this pattern dd/mm/yyyy
  // you can set pattern you need
  let dstring = `${("0" + d.getDate()).slice(-2)}/${("0" + (d.getMonth() + 1)).slice(-2)}/${d.getFullYear()}`;

  return dstring;
}
.date-selector {
  position: relative;
}

.date-selector>input[type=date] {
  text-indent: -500px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="date-selector">
  <input id="datePicker" class="form-control" type="date" onkeydown="return false" />
  <span id="datePickerLbl" style="pointer-events: none;"></span>
</div>

1赞 Stefan27 6/1/2021 #17

感谢 @safi eddine@Hezbullah Shah

img1

img2

img3

Img4

带有 VanillaJS 和 CSS 的 Datepicker。

CSS - 样式:

/*================== || Date Picker ||=======================================================================================*/

/*-------Removes the // Before dd - day------------------------*/
input[type="date"]::-webkit-datetime-edit-text
{
    color: transparent;    
}




/*------- DatePicker ------------------------*/
input[type="date"] {
    background-color: aqua;
    border-radius: 4px;
    border: 1px solid #8c8c8c;
    font-weight: 900;
}





/*------- DatePicker - Focus ------------------------*/
input[type="date"]:focus 
{
    outline: none;
    box-shadow: 0 0 0 3px rgba(21, 156, 228, 0.4);
}






input[type="date"]::-webkit-datetime-edit, input[type="date"]::-webkit-inner-spin-button, input[type="date"]::-webkit-clear-button {
    color: #fff;
    position: relative;    
}



    /*------- Year ------------------------*/
    input[type="date"]::-webkit-datetime-edit-year-field {
        position: absolute !important;
        border-left: 1px solid #8c8c8c;
        padding: 2px;
        color: #000;
        left: 56px;
    }


    /*------- Month ------------------------*/
    input[type="date"]::-webkit-datetime-edit-month-field {
        position: absolute !important;
        border-left: 1px solid #8c8c8c;
        padding: 2px;
        color: #000;
        left: 26px;
    }



    /*------- Day ------------------------*/
    input[type="date"]::-webkit-datetime-edit-day-field {
        position: absolute !important;
        color: #000;
        padding: 2px;
        left: 4px;
    }

JAVASCRIPT格式:

 // ================================ || Format Date Picker || ===========================================================
    function GetFormatedDate(datePickerID)
    {
        let rawDate = document.getElementById(datePickerID).value; // Get the Raw Date
        return rawDate.split('-').reverse().join("-"); // Reverse the date
    }

用:

 document.getElementById('datePicker').onchange = function () { alert(GetFormatedDate('datePicker')); }; // The datepickerID
2赞 andreszs 9/29/2021 #18

Firefox(由于未知版本)中的新功能,在“设置”>语言中,他们添加了一个选项:使用“西班牙语(西班牙)”的操作系统设置来格式化日期、时间、数字和度量单位

此选项将使用操作系统的区域设置来显示日期!太糟糕了,默认情况下它没有启用(也许从全新安装开始?

评论

2赞 David Walschots 10/22/2021
我在 Firefox v93.0 中找不到此设置。这是针对常规 Firefox,还是可能是开发者版的一部分?
0赞 andreszs 10/23/2021
我有普通的Firefox 93.0,选项在语言部分。每当浏览器语言与 Windows 区域和语言设置匹配时,它就会被隐藏吗?我有英语 Windows 和 Firefox,但 Windows 区域设置设置为西班牙语(阿根廷)。
0赞 David Walschots 10/23/2021
似乎有点奇怪(有问题?)设置功能。我在英语(英国)上有浏览器和 Windows,在荷兰语上有我的区域设置。没有选择荷兰语格式的选项。如果我将浏览器更改为荷兰语,那么我将获得与荷兰语格式同步的设置(而这并不重要,因为格式已经正确)。如果我将其更改为西班牙语,则该设置将再次删除。
2赞 D. Andrei 2/10/2022 #19

Angular 开发人员(也许还有其他人)可以考虑这个部分解决方案。

我的策略是检测输入字段的焦点状态,并相应地在日期和文本类型之间切换。明显的缺点是日期格式会在输入焦点上发生变化。

它并不完美,但可以确保相当程度的一致性,特别是如果您在 Web 应用程序中将一些日期显示为文本并且还有一些日期输入。如果您只有一个日期输入,这将不会很有帮助。

<input class="form-control"
       [type]="myInputFocus ? 'date' : 'text'"
       id="myInput"
       name="myInput"
       #myInput="ngModel"
       [(ngModel)]="myDate"
       (focus)="myInputFocus = true"
       (blur)="myInputFocus = false">

只需在组件类的开头声明即可。 显然指向您想要的控件。myInputFocus = falsemyDate

0赞 Honorable con 7/7/2022 #20

const birthday = document.getElementById("birthday");

const button = document.getElementById("wishBtn");


button.addEventListener("click", () => {
  let dateValue = birthday.value;
  // Changing format :)
  dateValue = dateValue.split('-').reverse().join('-');

  alert(`Happy birthday king/Queen of ${dateValue}`);
});
<input type="date" id="birthday" name="birthday" value="2022-10-10"/>

<button id="wishBtn">Clik Me</button>

评论

0赞 Ethan 7/11/2022
您的答案可以通过其他支持信息进行改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。
0赞 Rick Penabella 1/19/2023 #21

其实不是。

可破解但非常纤薄和可定制的解决方案是:

  1. 隐藏日期输入(CSS可见性:隐藏)(仍然显示日历弹出窗口)
  2. 在上面放一个文本输入
  3. 在文本输入点击时,使用JS获取日期输入元素并调用.showPicker()
  4. 将日期选取器值存储在其他位置
  5. 在文本输入中以所需的自定义格式显示值

下面是一些示例 react 代码:

               <div style={{ width: "100%", position: "relative" }}>
                    <input type="date" className={`form-control ${props.filters[dateFromAccessor] ? '' : 'bh-hasNoValue'}`} id={`${accessor}-date-from`} placeholder='from'
                        value={toDate(props.filters[dateFromAccessor])} style={{ marginRight: 0, visibility: "hidden" }}
                        onChange={e => {
                            props.setFilters({ ...props.filters, [dateFromAccessor]: inputsValueToNumber(e) })
                        }} />
                    <input type="text" className="form-control" readOnly
                        style={{ position: "absolute", top: 0, left: 0, width: "100%", height: "100%", backgroundColor: "white" }}
                        value={toDate(props.filters[dateFromAccessor])}
                        onClick={(e) => {
                        e.stopPropagation();
                        e.preventDefault();
                        (document.getElementById(`${accessor}-date-from`) as any)?.showPicker();
                    }}></input>
                </div>
0赞 Dim Vai 8/30/2023 #22

这是一个简单紧凑的解决方案(解决方法),没有任何库。

使用两个输入。真实/实际输入(隐藏)和外观(实际显示,但没有“名称”属性,因此是假的)。

<div>
    <input name="date" id="actualDate" type="date" hidden onchange="dateFacade.value=datefacade(this.value)">     
    <input id="dateFacade" type="text" class="form-control" onclick="actualDate.showPicker()">       
</div>

<script>
    let datefacade = (inputDate) => (new Date(inputDate)).toLocaleDateString('en-UK',{dateStyle: 'full'});
</script>

工作原理:

单击立面时,将显示实际输入的日期选择器。当实际日期发生变化时(因为您在日期选取器上选择了日期),外观输入会发生变化。

当然,使用你自己的功能。datefacade

(警告:它在 Codepen 中不起作用(由于 Codepen 限制)。将代码复制到实际文件,它应该可以正常工作。HTML