我想知道是否可以在html <input type="date"></input>
标记中设置日期格式...当前为yyyy-mm-dd,而我需要采用dd-mm-yyyy格式。
我想知道是否可以在html <input type="date"></input>
标记中设置日期格式...当前为yyyy-mm-dd,而我需要采用dd-mm-yyyy格式。
Answers:
你不知道
首先,您的问题是模棱两可的-您是指将其显示给用户的格式,还是将其传输给Web服务器的格式?
如果您指的是显示给用户的格式,那么这取决于最终用户界面,而不是您在HTML中指定的任何内容。通常,我希望它基于在操作系统区域设置中设置的日期格式。尝试使用您自己的首选格式来覆盖它是没有任何意义的,因为它显示的格式(通常来说)是针对用户所在区域的正确格式,以及用户用来书写/理解日期的格式。
如果您是指将其传输到服务器的格式,那么您正在尝试解决错误的问题。您需要对服务器端代码进行编程,以接受yyyy-mm-dd格式的日期。
input[type=password]
说:“用户代理应遮盖该值,以使除用户之外的其他人看不到它”,这与说用户代理应以某种方式显示日期一样多。
我在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;
}
输出:
为什么不按原样使用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"/>
我认为是这样,在HTML中没有DD-MM-YYYY格式的语法。请参阅此页面http://www.java2s.com/Code/SQLServer/Date-Timezone/FormatdateMmmddyyyyhhmmdp.htm。某种程度上它将帮助您。否则使用javascript日期选择器。
$('input[type="date"]').change(function(){
alert(this.value.split("-").reverse().join("-"));
});
我进行了许多研究,但我认为没有人可以强制采用这种格式<input type="date">
。浏览器选择本地格式,然后根据用户设置,如果用户的语言为英语,则日期将以英语格式(mm / dd / yyyy)显示。
我认为,最好的解决方案是使用插件来控制显示。
jQuery DatePicker似乎是一个不错的选择,因为您可以强制进行本地化,日期格式 ...
我想出的答案与上面所读的内容略有不同。
我的解决方案使用少量的JavaScript和html输入。
输入接受的日期将导致字符串格式为“ yyyy-mm-dd”。我们可以拆分它并将其正确放置为新的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()”中输入日期的某些方式会产生意外的结果。(即-落后一天)
<html>
<body>
<p id="result">result</p>Enter some text: <input type="date" name="txt" id="value" onchange="myFunction(value)">
<button onclick="f()">submit</button>
<script>
var a;
function myFunction(val){
a = val.split("-").reverse().join("-");
document.getElementById("value").type = "text";
document.getElementById("value").value = a;
}
function f(){
document.getElementById("result").innerHTML = a;
var z = a.split("-").reverse().join("-");
document.getElementById("value").type = "date";
document.getElementById("value").value = z;
}
</script>
</body>
</html>
简短的直接答案是是否开箱即用,但我想出了一种使用文本框和纯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">▼</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,供用户在页面加载时使用。
用于以mm-dd-yyyy格式
aa = date.split(“-”)
date = aa [1] +'-'+ aa [2] +'-'+ aa [0]
干净的实现没有依赖性。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>