修改HTML日期输入框默认格式为MM/DD/YYYY

记得有一次我在做一个项目,用户需要在表单中选择生日,但是公司规定日期格式应该是MM/DD/YYYY。
一开始我想到的是直接使用HTML日期输入框,但是一看,格式是YYYY-MM-DD。
这怎么可能行得通呢?于是,我开始琢磨、思考如何改变它。

我尝试了CSS,但发现只能隐藏原生样式而不能更改格式。
然后我就想到,JavaScript难道不能处理这种事情吗?于是,我开始研究如何使用JavaScript来转换日期格式。

我找到了Moment.js库,它非常方便,可以轻松地将日期格式从YYYY-MM-DD转换为MM/DD/YYYY。
于是,我在输入框的change事件中写了一个函数。
每当用户选择一个日期时,都会调用该函数来转换日期格式,然后在输入框的日期-日期属性中更新。

然后,我使用 CSS 隐藏了原生日期输入框的样式,只留下日期的自定义显示。
我还记得WebKit浏览器的伪类选择器用于隐藏本机按钮,这非常酷。

最后测试了一下,发现一切正常,日期格式变为MM/DD/YYYY,用户可以正常选择日期了。
不过,我也发现了一个问题,如果用户手动输入日期,格式可能不正确。
因此,我添加了一些验证以确保用户输入的格式正确。

虽然过程有点曲折,但最终还是成功了。
我真的很佩服自己居然想到用 JavaScript 和 CSS 来解决这个问题。
等等,还有一件事。
我突然想到,如果以后有类似的需求,我是否可以写一个插件,以便以后可以直接使用呢?

为什么选日期的框出不来

HTML教程 日期(date)

说实话,教 HTML 如何实现日期选择器一点也不难。
我刚开始学的时候也是一步步学的。
我们以 Sublime Text 编辑器为例。
操作非常简单。

你提到的步骤中有一个小点需要解释清楚。
例如,引入<input type="date">标签,这是HTML5 中的新功能。
如果您使用的是较旧版本的 HTML,例如 4 .01 或 XHTML,那么这个东西根本无法识别它。
我记得有一次,当我为客户更换旧系统时,我必须使用JavaScript来模拟日期选择器,这非常令人头疼。

有趣的是,许多浏览器现在完全支持<input type="date">。
我可以直接在 Windows 1 0 上的 Edge 和 Mac 上的 Chrome 中使用它。
但如果您一直使用古老的 IE 浏览器,您可能不得不依靠纯 JavaScript 来拯救世界。
我个人没有在这方面运行过IE1 1 我记得该数据是 X 市场份额的数据,但我建议您查看一下。

让我们回到代码本身:设置 title="date" 非常简单。
当我写文档时,我习惯将<title>标签的内容翻译成中文,以便于阅读。
例如,<title>日期选择器指南</title>,它可以让您轻松搜索文件。

还有一个细节需要提及。
某些浏览器,尤其是 iOS 上的 Safari,默认情况下处理 <input type="date"> 样式的方式很奇怪。
当我调试该项目时,我发现相同的日期选择器字段在 iPhone Safari 上显示为日历图标,只能通过单击它来选择,但在 Chrome 中它是一个普通的输入字段。
当时我不明白为什么,后来查了一下,发现是浏览器厂商添加的扩展。

最后说一个真实的案例。
我帮助一位从事外贸的朋友创建了一个网站。
他的客户包括使用旧版 Android 手机的老年人。
结果,这些家伙在使用 <input type="date"> 时就陷入了困境。
经过询问,得知手机系统对HTML5 新标签的支持不是很好。
最后,我们转而使用 <input type="text"> 和 JavaScript 日期控件,这解决了问题。

简而言之,HTML5 <input type="date">使用起来非常方便,但是需要考虑兼容性。
仍然应该有一个替代方案,特别是对于旧设备和旧浏览器。