一、时间选择的种类:
首先调用浏览器自带时间控件,input的type属性有以下几种写法:
HTML代码:
type=‘date’ //显示年、月、日
选择日期:
选择时间:
type=‘week’//显示年、周
选择星期:
type=‘month’//显示年、月
选择月份:
type=‘datetime-local’//显示年、月、日、时、分
DateTime-Local类型:<input type="datetime-local"/>
二、.对日期时间控件的样式进行修改
目前WebKit下有如下9个伪元素可以改变日期控件的UI:
::-webkit-datetime-edit – 控制编辑区域的
::-webkit-datetime-edit-fields-wrapper – 控制年月日这个区域的
::-webkit-datetime-edit-text – 这是控制年月日之间的斜线或短横线的
::-webkit-datetime-edit-month-field – 控制月份
::-webkit-datetime-edit-day-field – 控制具体日子
::-webkit-datetime-edit-year-field – 控制年文字, 如2017四个字母占据的那片地方
::-webkit-inner-spin-button – 这是控制上下小箭头的
::-webkit-calendar-picker-indicator – 这是控制下拉小箭头的
::-webkit-clear-button –这是控制清除按钮的
实例
1.问题--------date类型改变行高和高度那个小三角并不会根据大小调整,实在太丑了,所以决定把它隐藏掉。
/* 去掉date中上下小三角,但是保留input类型为number的小三角。 */
input[type="date"]::-webkit-inner-spin-button { visibility: hidden; }
/*----------用来移除叉叉按钮 鼠标移上去还会显示----------*/
input[type="date"]::-webkit-clear-button{ display:none; }
代码
<style>
/* 控制编辑区域的 */
input[type="date"]::-webkit-datetime-edit{
/* content: '起始时间'; */
color: rgb(188,188,188);
padding-left: 10px;
}
/* 控制年月日这个区域的 */
input[type="date"]::-webkit-datetime-edit-fields-wrapper {
background-color: #eee;
}
/* 这是控制年月日之间的斜线或短横线的 */
input[type="date"]::-webkit-datetime-edit-text {
color: blue;
padding: 0 .3em;
}
/* 控制年字 */
input[type="date"]::-webkit-datetime-edit-year-field {
color: purple;
}
/* 控制月字 */
input[type="date"]::-webkit-datetime-edit-month-field {
color: red;
}
/* 控制日字 */
input[type="date"]::-webkit-datetime-edit-day-field {
color: pink;
}
/*控制下拉小箭头的*/
input[type="date"]::-webkit-calendar-picker-indicator {
display: inline-block;
width: 15px;
height: 15px;
/* position: absolute;
top: 12px;
right: 0px; */
border: 1px solid #ccc;
border-radius: 2px;
box-shadow: inset 0 1px #fff, 0 1px #eee;
background-color: #eee;
/* background:url('../images/icon.png') -188px -99px; */
background-image: -webkit-linear-gradient(top, #f0f0f0, #e6e6e6);
color: #666;
}
/* 去掉date中上下小三角,但是保留input类型为number的小三角。 */
input[type=date]::-webkit-inner-spin-button {
visibility: hidden;
}
/*----------用来移除叉叉按钮 鼠标移上去还会显示----------*/
/* input[type="date"]::-webkit-clear-button{
display:none;
} */
</style>
</head>
<body>
<div class="time_box">
<input type="date">
</div>
</body>
默认—点击时间表单的效果
修改完后
三、以下的囊括了date,datetime,week,time等所用的伪元素:
input::-webkit-datetime-edit{}
input::-webkit-datetime-edit-fields-wrapper{}
input::-webkit-datetime-edit-ampm-field{}
input::-webkit-datetime-edit-day-field{}
input::-webkit-datetime-edit-hour-field{}
input::-webkit-datetime-edit-millisecond-field{}
input::-webkit-datetime-edit-minute-field{}
input::-webkit-datetime-edit-month-field{}
input::-webkit-datetime-edit-second-field{}
input::-webkit-datetime-edit-week-field{}
input::-webkit-datetime-edit-year-field{}
input::-webkit-datetime-edit-ampm-field:focus{}
input::-webkit-datetime-edit-day-field:focus{}
input::-webkit-datetime-edit-hour-field:focus{}
input::-webkit-datetime-edit-millisecond-field:focus{}
input::-webkit-datetime-edit-minute-field:focus{}
input::-webkit-datetime-edit-month-field:focus{}
input::-webkit-datetime-edit-second-field:focus{}
input::-webkit-datetime-edit-week-field:focus{}
input::-webkit-datetime-edit-year-field:focus{}
input::-webkit-datetime-edit-year-field[disabled]{}
input::-webkit-datetime-edit-month-field[disabled]{}
input::-webkit-datetime-edit-week-field[disabled]{}
input::-webkit-datetime-edit-day-field[disabled]{}
input::-webkit-datetime-edit-ampm-field[disabled]{}
input::-webkit-datetime-edit-hour-field[disabled]{}
input::-webkit-datetime-edit-millisecond-field[disabled]{}
input::-webkit-datetime-edit-minute-field[disabled]{}
input::-webkit-datetime-edit-second-field[disabled]{}
input::-webkit-datetime-edit-text{}
input::-webkit-inner-spin-button{}
input::-webkit-calendar-picker-indicator{}
input::-webkit-calendar-picker-indicator:hover{}
四、如何更改时间精确度数(月\周\时分秒)
$('input[name="time"]').change(function(){
var myDate = new Date(); //获取当前时间对象,精确到当前的时、分、秒
var this_time=$('input[name="time"]').val();//获取用户选择后的时间值
var this_datetime=new Date(this_time);//获取用户选择的时间,生成时间对象 具体时间为时间8:00:00
var year = myDate.getFullYear(); //获取当前时间的年份 格式xxxx 如:2016
var month =myDate.getMonth()+1; //获取当前时间的月份 格式1-9月为x, 10-12月为xx 如:11
var date = myDate.getDate(); //获取当前时间的日期 格式同月份 如11
myDate=new Date(year+'-'+month+'-'+date); //获取根据上述时间生成的时间对象 具体时间为0:00:00
var now=new Date(year+'-'+month+'-'+date+' 8:00:00');
myDate.setDate(now.getDate()-7); //设置now对象相应日期的七天前日期 具体时间为0:00:00
if(this_datetime<myDate||this_datetime>now){ //时间对象可以直接比较大小
alert('拜访时间需选择今天及以前7天内的时间');
$('input[name="time"]').val('');
};
具体的方法在代码和注释里都做了说明,里面有一个坑就是:我们在自己设置时间对象时如new Date(‘2016-11-11’),生成的时间2016-11-11 0:00:00;
而当我们在时间控件里选择时间如:2016-11-11,然后用这个时间值设置时间对象new Date(value),生成的时间却是2016-11-11 8:00:00,这可能和我们国家的时间控件按北京时间进行了一些修改有关,但这毕竟在我们用js进行时间对比时会造成一定的判断错误,需要注意!
五、如何设置时间的最大选择时间
做项目时在用户信息中添加了 ‘出生年月’ 这一字段
当时就直接就在页面上写了H5的新特征 input 标签 type=‘date’
<div class="form-group">
<label class="col-sm-3 control-label">出生年月</label>
<div class="col-sm-9">
<input type="date" class="form-control" placeholder="请输入出生年月"
name="UserInfoFormMap.birthday" id="birthday" value="" max="">
</div>
</div>
写完之后我就寻思着用户的非法操作,比如选择一个大于当前时间的日期作为生日
这肯定是不合理的
于是我就设置了标签的max 属性,如下
<div class="form-group">
<label class="col-sm-3 control-label">出生年月</label>
<div class="col-sm-9">
<input type="date" class="form-control" placeholder="请输入出生年月"
name="UserInfoFormMap.birthday" id="birthday" value="" max="2018-6-28">
</div>
</div>
结果F5刷新,设置倒是设置上去了,就是没效果
依然可以选择大于我设置的 ‘2018-6-28’
结果没想到是因为,max中设置时间的话,小于10的数字,要用 ‘0’补齐,如下
可以看得出,大于我设置的 ‘2018-06-28’ 已经不能被选择了 !欧了`
不过把程序写入死值,是不是显得不够专业
好,接下来贴一段js,来设置他能够动态的禁用大于当前时间的日期
$(function(){
//得到当前时间
var date_now = new Date();
//得到当前年份
var year = date_now.getFullYear();
//得到当前月份
//注:
// 1:js中获取Date中的month时,会比当前月份少一个月,所以这里需要先加一
// 2: 判断当前月份是否小于10,如果小于,那么就在月份的前面加一个 '0' , 如果大于,就显示当前月份
var month = date_now.getMonth()+1 < 10 ? "0"+(date_now.getMonth()+1) : (date_now.getMonth()+1);
//得到当前日子(多少号)
var date = date_now.getDate() < 10 ? "0"+date_now.getDate() : date_now.getDate();
//设置input标签的max属性
$("#birthday").attr("max",year+"-"+month+"-"+date);
})
F5刷新页面,ok了!