用jquery实现的日期控件,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>日期控件</title>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<style>
/* 弹出的最外层 */
#dateDiv {
width: 400px;
display: none;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
margin-top: 5px;
padding-top: 10px;
padding-bottom: 5px;
}
#date {
height: 30px;
width: 400px;
text-align: left;
border-radius: 5px;
border: 1px solid #c8cccf;
outline: 0;
padding-left: 15px;
box-sizing: border-box;
}
.date {
width: 400px;
}
/* 选择 */
.dateSelect {
width: 410px;
margin: 10px 20px;
}
.dateSelect span:not(:nth-child(3)):hover {
cursor: pointer;
color: #409eff;
}
.dateSelect span:nth-child(3) {
padding: 0 78px;
}
.dateSelect span:nth-child(2) {
padding-left: 20px;
}
.dateSelect span:nth-child(4) {
padding-right: 20px;
}
/* 日 */
.dateDay {
width: 400px;
border-collapse: collapse;
}
.dateDay tr td {
text-align: center;
}
.dateDay tr:first-child {
border-bottom: 1px solid #e4e7ed
}
.dateDay tr td {
padding: 10px;
}
.dateDay tr:not(:first-child) td:hover {
cursor: pointer;
color: #409eff;
}
.gloomColor {
color: #c0c4cc;
}
.lightColor {
color: #409eff;
}
</style>
</head>
<body>
<!-- 弹出框 -->
<div class="date">
<input id="date" type="text" placeholder="点击选择日期">
<!-- 进退以及显示选中日期 -->
<div id="dateDiv">
<div class="dateSelect">
<span id='lastYear'>&lt;&lt;</span>
<span id='lastMonth'>&lt;</span>
<span></span>
<span id='nextMonth'>&gt;</span>
<span id='nextYear'>&gt;&gt;</span>
</div>
<table class="dateDay"></table>
</div>
</div>
<script>
$(document).ready(function () {
var closeDateDiv = true; //默认值,框是消失的
$('#date').focus(function () {
$('#dateDiv').css('display', 'block');
})
$('#date').blur(function () {
if (closeDateDiv === true) {
$('#dateDiv').css('display', 'none');
} else {
$('#date').focus(); //打开验证
closeDateDiv = true; //刷新验证条件
}
})
//初始化日期—今天
var nowDate = new Date;
// 年
var year = nowDate.getFullYear();
// 月
var month = nowDate.getMonth() + 1;
// 日
var day = nowDate.getDate();
//固定当前年、月、日
var constYear = year;
var constMonth = month;
var constDay = day;
// 星期
var week = new Date(year + '-' + month + '-' + 1).getDay();
// 当月总天数
var nowDays;
//上一月总天数
var lastDays;
//下一月总天数
var nextDays;
// 上一月
var lastMonth;
// 下一月
var nextMonth;
// 刷新日期
function refreshDate() {
var nowDate = year + '年' + month + '月';
$('.dateSelect span:nth-child(3)').html(nowDate); //这样写的问题是,将来html结构变化,会出错
}
//返回某月总天数
function monthDays(year, month) {
if (month === 1 || month === 3 || month === 5 || month === 7 || month === 8 ||
month === 10 || month === 12) {
return 31;
} else if (month === 4 || month === 6 || month === 9 || month === 11) {
return 30;
} else if (month === 2) {
if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {
return 29;
} else {
return 28;
}
}
}
// 将日压入列表中
function dateHtml() {
refreshDate();
if (month === 1) {
lastMonth = 12;
} else {
lastMonth = month - 1;
}
// 上月有多少天
lastDays = monthDays(year, lastMonth);
nowDays = monthDays(year, month);
//日的html
var dayHtml = '<tr><td>日</td><td>一</td><td>二</td><td>三</td><td>四</td><td>五</td><td>六</td></tr>';
// 如果上个月的最后一天是周六,那就要占7天!
if (new Date(year + '-' + lastMonth + '-' + lastDays).getDay() === 6) {
week = 7;
} else {
week = new Date(year + '-' + month + '-' + 1).getDay();
}
var dateArr = [];
for (var i_last = lastDays - week + 1; i_last < lastDays + 1; i_last++) {
dateArr.push({
html: i_last,
color: 0
});
}
if (year === constYear && month === constMonth) {
var right = true;
}
for (var i_now = 1; i_now < nowDays + 1; i_now++) {
dateArr.push({
html: i_now,
color: i_now === day && right ? 1 : ''
});
}
for (var i_next = 1; i_next < 42 - (week + nowDays) + 1; i_next++) {
dateArr.push({
html: i_next,
color: 2
});
}
for (var i_date = 0; i_date < dateArr.length; i_date++) {
if (i_date === 0 || i_date === 7 || i_date === 14 || i_date === 21 || i_date === 28 ||
i_date === 35) {
dayHtml += "<tr>" + "<td " + "data-type=" + dateArr[i_date].color + ">" + dateArr[
i_date].html + "</td>";
} else if (i_date === 6 || i_date === 13 || i_date === 20 || i_date === 27 || i_date === 34 ||
i_date === 41) {
dayHtml += "<td " + "data-type=" + dateArr[i_date].color + ">" + dateArr[i_date].html +
"</td></tr>";
} else {
dayHtml += "<td " + "data-type=" + dateArr[i_date].color + ">" + dateArr[i_date].html +
"</td>";
}
}
//挂载DOM,找出相应的元素加上对应的样式
$('.dateDay').html(dayHtml);
$(".dateDay [data-type='0'],.dateDay [data-type='2']").addClass('gloomColor');
$(".dateDay [data-type='1']").addClass('lightColor');
}
// 冒泡绑定点击事件
//mousedown与click有区别
$(".dateDay").mousedown(function (e) {
if (Number(e.target.innerText)) {
closeDateDiv = true;
if (e.target.attributes[0].nodeValue === "0") {
if (month === 1) {
$('#date').val((year - 1) + '年' + 12 + '月' + e.target.innerText + '日');
} else {
$('#date').val(year + '年' + (month - 1) + '月' + e.target.innerText + '日');
}
} else if (e.target.attributes[0].nodeValue === "2") {
if (month === 12) {
$('#date').val((year + 1) + '年' + 1 + '月' + e.target.innerText + '日');
} else {
$('#date').val(year + '年' + (month + 1) + '月' + e.target.innerText + '日');
}
} else if (e.target.attributes[0].nodeValue === "1" || e.target.attributes[0].nodeValue ===
"") {
$('#date').val(year + '年' + month + '月' + e.target.innerText + '日');
}
$(".dateDay tr td").removeClass('lightColor');
$(e.target).addClass('lightColor');
} else {
closeDateDiv = false;
}
});
dateHtml();
// 点击切换年、月
$('#lastYear').mousedown(function () {
year -= 1;
dateHtml();
});
$('#nextYear').mousedown(function () {
year += 1;
dateHtml();
});
$('#lastMonth').mousedown(function () {
if (month === 1) {
year -= 1;
month = 12;
} else {
month -= 1;
}
dateHtml();
});
$('#nextMonth').mousedown(function () {
if (month === 12) {
year += 1;
month = 1;
} else {
month += 1;
}
dateHtml();
});
$('.dateSelect').mousedown(function(){
closeDateDiv = false;
console.log(1);
});
})
</script>
</body>
</html>

新建一个html,复制代码运行即可。

有问题联系 QQ 412606846  (微信同号)

用jquery实现日期控件的更多相关文章

  1. jQuery Datepicker日期控件

    datepicker可以为bootstrap添加一个事件选择控件,适用于任何需要调用的场合,支持多种事件格式输出(比如:dd, d, mm, m, yyyy, yy等),是制作网页不可缺失的插件. R ...

  2. JQuery datepicker 日期控件设置

    datepicker控件可通过参数设置进行语言切换,以下可实现,系统所有日期控件默认为中文,在特定页面或者特定条件下可切换成英语!~ HTML: <!DOCTYPE html> <h ...

  3. jQuery UI 日期控件--datepicker

    在web开发中,日期的输入经常会遇到.我们会用的解决方法有: 1.自己写css和js,对日期进行控制:----有点浪费精力和时间: 2.用easyui插件中的日期插件来实现: 3.用juqery-ui ...

  4. Jquery + css 日期控件用法实例.zip

    /*==============================================================================** Filename:common.j ...

  5. 【前端控件】JQuery datepicker 日期控件设置

    datepicker控件可通过参数设置进行语言切换,以下可实现,系统所有日期控件默认为中文,在特定页面或者特定条件下可切换成英语!~ HTML: <!DOCTYPE html> <h ...

  6. jQuery LayDate 日期控件

    她基于原生JavaScript精心雕琢,兼容了包括IE6在内的所有主流浏览器.她具备优雅的内部代码,良好的性能体验,和完善的皮肤体系,并且完全开源,你可以任意获取开发版源代码,一扫某些传统日期控件的封 ...

  7. JQuery EasyUI 日期控件 怎样做到只显示年月,而不显示日

    标题问题的答案在OSChina中 http://www.oschina.net/question/2282354_224401?fromerr=lHJTcN89 我还是把这个记录下来 ======== ...

  8. jQuery DateTimePicker 日期控件

    在线实例 实例演示 使用方法 <input id="datetimepicker" type="text" > 复制 $('#datetimepic ...

  9. jquery datepicker日期控件用法

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.c ...

随机推荐

  1. Nginx 调优经验记录

    1.2017年连续爆出5.x版本xshell安全问题和intel的cpu设计漏洞 ,此时我就注意到尽量少暴露自己线上使用的工具以及版本.例如:mysql版本,以及缓存层策略,服务器版本等,以下为 隐藏 ...

  2. 禁掉coolie,session还能正常使用吗?

    Cookie禁用了,Session还能用吗?   Cookie与 Session,一般认为是两个独立的东西,Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状态的方案 ...

  3. Vmware下centos与windows能ping通并能上网

    1.桥接模式 2.NAT模式 3.Host-Only模式 1.桥接模式 vim /etc/udev/rules.d/70-persistent-net.rules 与/etc/sysconfig/ne ...

  4. 安装CentOS7

    安装环境:虚拟机*1 使用软件:CentOS7镜像*1 安装过程: 虚拟机配置步骤(主要部分): 1.安装为Linux:CentOS 64位 2.分配1G内存(若需求大可根据实际情况分配) 3.分配4 ...

  5. Micropython 如何用Turnipbit做一个自动浇水装置

    最近在研究Turnipbit这块板子,打算是连接一个摄像头模块,正在实验练习中,(祝自己早日弄好)上篇文章我们讲了用Turnipbit连接LCD5110显示英文词句,前几天给家里花浇水的时候发现花招了 ...

  6. mysql常用基础操作语法(四)--对数据的简单无条件查询及库和表查询【命令行模式】

    1.mysql简单的查询:select 字段1,字段2...  from tablename; 如果字段那里写一个*,代表查询所有的字段,等同于指定出所有的字段名,因此如果要查询所有字段的数据,一般都 ...

  7. mysql数据库常用数据类型

    1.整数:TINYINT.SMALLINT.MEDIUMINT.INT(INTEGER).BIGINT,比较常用的是INT,这五种类型只是取值范围不一样,具体的范围可以在mysql shell界面使用 ...

  8. WebService之CXF注解报错(三)

    WebService之CXF注解 1.具体错误如下 五月 04, 2014 11:29:28 下午 org.apache.cxf.wsdl.service.factory.ReflectionServ ...

  9. Java注释分类

    Java注释分类 1.单行注释    //打印结果    System.out.println("结果是:"+result); 2.多行注释    /**     * @autho ...

  10. ReferenceError: Error #1065: 变量 dataGridArray 未定义

    1.错误描述 ReferenceError: Error #1065: 变量 dataGridArray 未定义. at global/flash.utils::getDefinitionByName ...