用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. 在SpringBoot中配置aop

    前言 aop作为spring的一个强大的功能经常被使用,aop的应用场景有很多,但是实际的应用还是需要根据实际的业务来进行实现.这里就以打印日志作为例子,在SpringBoot中配置aop 已经加入我 ...

  2. SpringBoot整合SpringSecurity,SESSION 并发管理,同账号只允许登录一次

    重写了UsernamePasswordAuthenticationFilter,里面继承AbstractAuthenticationProcessingFilter,这个类里面的session认证策略 ...

  3. Go基础之--操作Mysql(一)

    关于标准库database/sql database/sql是golang的标准库之一,它提供了一系列接口方法,用于访问关系数据库.它并不会提供数据库特有的方法,那些特有的方法交给数据库驱动去实现. ...

  4. ActiveMq笔记1-消息可靠性理论

    原博客:http://shift-alt-ctrl.iteye.com/blog/2020182 https://mp.weixin.qq.com/s/h74d6LtGB5M8VF0oLrXdCA 我 ...

  5. node实现jsonp跨域

    1. 搭建node server //引入模块 var http=require("http"); var fs=require("fs");var url = ...

  6. android判断网络是否可用

    private boolean isNetworkConnected(Context context) { ConnectivityMannger cManager = (ConnectivityMa ...

  7. linux pxe网络装机无人值守

    项目分析远程装机的实现:配置DHCP+HTTP+TFTP提供通过vesamenu.c32模块实现图形PXE菜单为不同系统分别提供ks应答文件将第三方rpm包以yum源的方式提供:集中提供ntfs-3g ...

  8. 从零开始学习前端JAVASCRIPT — 12、JavaScript面向对象编程

    一.构造函数的使用 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  9. [JCIP笔记] (一)多线程的起源

    在很久很久以前,那时的计算机还没有操作系统这种东西,所以只能有一个程序,从头到尾地跑.于是这个程序要负责使用所有的资源,还得响应外部请求.想想这个程序得多复杂啊--为了做成一件事,可能要先把内存啊.I ...

  10. 利用ICSharpCode.SharpZipLib进行压缩

    #ZipLib is a Zip, GZip, Tar and BZip2 library written entirely in C# for the .NET platform. It is im ...