用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. window 环境变量保存位置在哪里?

    注册表-regedit.exe 用户变量: HKEY_CURRENT_USER\Environment 系统变量: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSe ...

  2. 《android开发艺术探索》读书笔记(十一)--Android的线程和线程池

    接上篇<android开发艺术探索>读书笔记(十)--Android的消息机制 No1: 在Android中可以扮演线程角色的有很多,比如AsyncTask.IntentService.H ...

  3. 文本处理三剑客之grep&正则表达式

    grep是一个文本过滤工具,它支持正则表达式,能把搜索匹配到的行打印出来.grep的全称是Global Regular Expression Print(全局正则表达式)使用权限是所有用户. 一.gr ...

  4. swift 学习之自动引用计数

    swift 学习之自动引用计数 学习和研究的主要是"实例对象和实例对象直接的相会强引用所产生的内从泄漏"和"使用闭包产生的强引用造成的内存泄漏" 注意:只有以引 ...

  5. 学生信息管理系统(c语言)

    ①注意: 程序中使用了sleep()函数.system()函数 关于 sleep() 函数 sleep() 函数的头文件和用法会因环境的不同而有所不同. 具体见-sleep()函数功能及用法 关于sy ...

  6. AutoAudit研究学习

    AutoAudit介绍   AutoAudit这个是Paul Nielsen写的一个开源的审计跟踪的脚本项目,项目位于https://autoaudit.codeplex.com/上,Paul Nie ...

  7. android自定义Notification通知栏实例

    项目有个需求,需要在发送Notification的时候动态给定url的图片.大概思路如下:自己定义一个Notification的布局文件,这样能够很方便设置View的属性. 首先加载网络图片,使用Bi ...

  8. R语言学习笔记︱Echarts与R的可视化包——地区地图

    笔者寄语:感谢CDA DSC训练营周末上完课,常老师.曾柯老师加了小课,讲了echart与R结合的函数包recharts的一些基本用法.通过对比谢益辉老师GitHub的说明文档,曾柯老师极大地简化了一 ...

  9. 【mysql】mysql基本操作

    mysql基本操作 1.mysql表复制 mysql 表结构的复制 create table t2 like t2 mysql 表数据的复制 insert into t2 select * from ...

  10. R语言︱list用法、批量读取、写出数据时的用法

    列表是一种特别的对象集合,它的元素也由序号(下标)区分,但是各元素的类型可 以是任意对象,不同元素不必是同一类型.元素本身允许是其它复杂数据类型,比如,列表 的一个元素也允许是列表.例如: > ...