JS多选日期
项目需要一个可以选择多个日期的日期选择框,从网上找到一个单选的选择框源码 (http://blog.5d.cn/user2/samuel/200503/61881.html),修改成可以多选。 使用方法: 调用方法很简单:
<input type="text" name="dateBegin" onclick="calendarShow(this)" readonly> 或者用button调用也行 <input type="text" name="dateBegin" readonly><button onclick="calendarShow(document.all.dateBegin)">选择日期</button> 得到的结果(dateBegin的Value值)是多个日期值,会使用";"进行间隔,如:2010-10-23;2010-12-24这样的。 当然最开始的时候你也需要这样给这个栏位初始值。 还有就是当初设计的哥哥比较黑,最大的月份是当前月份,我修改为了2999-12-31. V1.1修改部分: 1)增加两种新的调用方法 calendarShow1(this)==>设定只能输入一个日期 calendarShowN(this,n)==>自己设定最多可以输入的日期数,如果开始给那个栏位赋值就更多,就无法增加 calendarShow(this) ==>为了兼容性,默认最大的值为200,建议不要使用这个了 2)Fix 闰年的Bug。 3)改为英文版 增加两个function,一个为日期单选calendarShow1,一个为日期多选为calerdarShowM,后者还可以设定一个参数,允许最多的日期数。 //============================== 定义属性 ==========
var calendarDisplay = false; //是否显示
var yearBegin = 2004; //开始时间
var yearEnd = 2999; //截至年
var monthEnd = 12; //截至月
var dayEnd = 31; //截至日
var dayStrDef = "<table class=\"calendar\" width='100%' cellpadding='0' border='1' bordercolorlight='#C0C0C0' bordercolordark='#C0C0C0'><tr>";
var dayStr = dayStrDef;
var yearC = getNow(1);
var monthC = getNow(2);
var dayC = getNow(3);
var dateFormat = "yyyy-MM-dd"; //自定义格式
var dateObj; //和外部的交換控件
var statStr = "";
var dateList; //日期列表
var maxLen=200;//日期的最大長度,如果沒有指定,為100 function getNow(dateType) {
var dateTemp = new Date();
switch (dateType) {
case 0:
nowTemp = dateTemp.getYear() + "-" + (dateTemp.getMonth() + 1) + "-" + dateTemp.getDate();
break;
case 1:
nowTemp = dateTemp.getYear();
break;
case 2:
nowTemp = dateTemp.getMonth();
break;
case 3:
nowTemp = dateTemp.getDate();
break;
case 4:
nowTemp = dateTemp.getDay();
break;
}
return nowTemp;
} function createCalendar() {
dayStr = dayStrDef;
var lastDay = getLastDay(yearC, parseInt(monthC) + 1);
var startDay = getWeekDay(yearC, parseInt(monthC) + 1, 1);
var d = 1;
for (w = 0; w <= lastDay + startDay - 1; w++) {
if (w != 0 && w % 7 == 0) {
dayStr += "</tr><tr>";
}
if (w >= startDay) {
dayStr += "<td onclick='changeDateList(" + d + ");daySpace.innerHTML = createCalendar();' style='cursor:hand' onMouseOver='this.className=\"mouseOver\"' onMouseOut='this.className=\"mouseOut\"'>";
if (isInDateList(d)) {
dayStr += "<b><font color=red>";
}
dayStr += d;
d++;
}
else {
dayStr += "<td>";
dayStr += " ";
}
}
dayStr += "</tr></table>";
return dayStr;
} function getWeekDay(year, month, day) {
var d = new Date();
d.setFullYear(year);
d.setMonth(month - 1);
d.setDate(day);
s = d.getDay();
return s;
} function getLastDay(year, month) {
if (month < 8) {
if (month % 2 != 0) {
return 31;
}
if (month == 2) {
if (year % 400 == 0 || (year % 100 !=0 && year %4 ==0 )) {
return 29;
}
return 28;
}
else {
return 30;
}
}
if (month % 2 != 0) {
return 30;
}
return 31;
} function one2two(d) {
var s = d;
if (d < 10) {
s = "0" + d;
}
return s;
} function transferDate(day) {
dayC = day;
datevalue = dateFormat.replace("yyyy", yearC);
datevalue = datevalue.replace("MM", one2two(parseInt(monthC) + 1));
datevalue = datevalue.replace("dd", one2two(dayC));
return datevalue;
} function selectCalendar(dateType, datevalue) {
var d = new Date(yearC, monthC, dayC);
if (dateType == "year") {
year = parseInt(yearC) + datevalue;
if (year >= yearEnd) {
year = yearEnd;
if (monthC > monthEnd) {
d.setMonth(monthEnd);
}
}
if (year < yearBegin) {
year = yearBegin;
}
d.setFullYear(year);
}
if (dateType == "month") {
month = parseInt(monthC) + datevalue;
if (yearC >= yearEnd && month > monthEnd) {
month = monthEnd;
calendarState.innerHTML = "Max month";
}
if (yearC == yearBegin && month < 0) {
month = 0;
calendarState.innerHTML = "Min month";
}
d.setDate(1);
d.setMonth(month);
}
yearC = d.getYear();
monthC = d.getMonth();
setCalendarDef();
daySpace.innerHTML = createCalendar();
} function initDateList(dateObj) {
var str = dateObj.value;
if (str.trim() == "") {
dateList = new Array();
} else {
dateList = str.split(";");
}
checkLength();
} function changeDateList(day) {
var str1 = transferDate(day);
for (i = 0; i < dateList.length; i++) {
if (dateList[i] == str1) {
dateList.splice(i, 1);
saveDateList();
return;
}
}
if (checkLength()) {
dateList[dateList.length] = str1;
saveDateList();
return;
} else if (maxLen == 1) {
dateList[0] = str1;
saveDateList();
return;
}
} function checkLength() {
if (dateList.length >= maxLen) {
calendarState.innerHTML = "too long";
return false;
}
return true;
} function saveDateList() {
dateObj.value = dateList.join(";");
} function isInDateList(day) {
var str1 = transferDate(day);
for (i = 0; i < dateList.length; i++) {
if (dateList[i] == str1) {
return true;
}
}
return false;
} function calendarShow(calendarObj) {
if (calendarDisplay) {
calendar.style.display = "none";
dayStr = dayStrDef;
return;
}
else {
dateObj = calendarObj;
calendar.style.display = "block";
initDateList(dateObj);
}
createSelect(document.all.calendarYear, yearBegin, yearEnd, "year");
createSelect(document.all.calendarMonth, 1, 12, "month");
setCalendarDef();
objL = document.body.scrollLeft + window.event.x - 10;
objT = calendarObj.getBoundingClientRect().top + calendarObj.clientHeight;
calendar.style.left = objL - 2;
calendar.style.top = objT + 1;
setCalendarvalue();
daySpace.innerHTML = createCalendar();
}
function calendarShow1(calendarObj) {
maxLen=1;
calendarShow(calendarObj);
}
function calendarShowN(calendarObj, maxLength) {
maxLen = maxLength;
calendarShow(calendarObj); } function createSelect(selectObj, begin, end, selectType) {
for (i = begin; i <= end; i++) {
value = i;
if (selectType == "month") {
var value = i - 1;
}
selectObj.options[i - begin] = new Option(i, value);
}
} function defSelect(selectObj, defvalue) {
for (i = 0; i < selectObj.length; i++) {
if (selectObj.options[i].value == defvalue) {
selectObj.options[i].selected = true;
return;
}
}
} function setCalendarvalue() {
yearC = document.all.calendarYear.value;
monthC = document.all.calendarMonth.value;
daySpace.innerHTML = createCalendar();
} //================================================== Validate =====
String.prototype.trim = function () { //String's Trim()
return this.replace(/(^\s*)|(\s*$)/g, "");
} function isNull(strTemp) { //判断是否为空
if (strTemp == null || strTemp.trim() == "") {
return true;
}
return false;
} //=============================================================
//================================================ Main() =====
function setCalendarDef() {
defSelect(document.all.calendarYear, yearC);
defSelect(document.all.calendarMonth, monthC);
} function calendarHidden() {
if (calendarDisplay) {
calendarShow();
calendarDisplay = false;
}
else if (calendar.style.display == "block") {
calendarDisplay = true;
}
}
document.onclick = calendarHidden;
cStr = "<style>.calendar {border-collapse: collapse;text-align:center}td {font-size:9pt;fontFamily=arial,sans-serif;} .title01 {background-color:#008080;color:#FFFFFF;} input {font-size:9pt;fontFamily=arial,sans-serif;}select {font-size:9pt;font-family:arial,sans-serif;}.mouseOver {background-color: #e6e7e8;}.mouseOut {background-color: #ffffff;}</style>";
cStr += "<div onclick='calendarDisplay=false' id='calendar' Author='smart' style=\"background-color=#ffffff; display:none;position: absolute;z-index:0;filter :\'progid:DXImageTransform.Microsoft.Shadow(direction=135,color=#787878,strength=5)\'\">";
cStr += "<table class=\"calendar\" cellpadding='0' border='1' width='160' bordercolorlight='#000000' bordercolordark='#000000'>";
cStr += "<tr><td colspan='7' bgcolor='#E1E1E1'>";
cStr += "<span style='cursor:hand' onclick='selectCalendar(\"year\",-1)' onMouseOut=\"calendarState.innerHTML=statStr\"><<</span> <span style=\"cursor:hand\" onclick=\"selectCalendar('month',-1)\" onMouseOut=\"calendarState.innerHTML=statStr\"><</span>";
cStr += " <select name=\"calendarYear\" onChange=\"setCalendarvalue()\"></select><select name=\"calendarMonth\" onChange=\"setCalendarvalue()\"></select> ";
cStr += "<span style=\"cursor:hand\" onclick=\"selectCalendar('month',1)\" onMouseOut=\"calendarState.innerHTML=statStr\">></span> <span style=\"cursor:hand\" onclick=\"selectCalendar('year',1)\" onMouseOut=\"calendarState.innerHTML=statStr\">>></span></td>";
cStr += "</tr><tr class=\"title01\"><td>Sun</td><td>Mon</td><td>Tue</td><td>Wed</td><td>Thu</td><td>Fri</td><td>Sat</td></tr>";
cStr += "<tr><td colspan=\"7\"><div id=\"daySpace\"></div></td></tr>";
cStr += "<tr><td colspan=\"7\" bgcolor=\"#E1E1E1\"><table width=\"100%\" cellpadding='0'><tr><td width=\"60%\">";
cStr += "<div style=\"font-family:Arial;font-size:8pt\" id=\"calendarState\" onDblclick=\"calendarState.innerHTML=''\" onMouseOut=\"calendarState.innerHTML='" + statStr + "'\">" + statStr + "</div>";
cStr += "</td><td><span style=\"font-family:Arial;font-size:8pt;color:ff0000;cursor:hand\" onclick=\"saveDateList();calendarHidden();\">[save]</span><span style=\"font-family:Arial;font-size:8pt;color:ff0000;cursor:hand\" onclick=\"calendarHidden()\">[Close]</span></td></tr></table></td></tr></table></div>";
document.write(cStr);
JS多选日期的更多相关文章
- [js开源组件开发]js多选日期控件
js多选日期控件 详情请见:http://www.lovewebgames.com/jsmodule/calendar.html 它的github地址:https://github.com/tianx ...
- 腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经纬度的问题 try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后? js获取某个日期
腾讯云图片鉴黄集成到C# 官方文档:https://cloud.tencent.com/document/product/641/12422 请求官方API及签名的生成代码如下: public c ...
- js快捷输入日期
点击这里查看效果http://keleyi.com/keleyi/phtml/jstexiao/10.htm 以下式代码: <!DOCTYPE html> <html> < ...
- js 复选框 全选都选 如果某一个子复选框没选中 则全选按钮不选中
<!DOCTYPE HTML> <html> <head> <meta charset=UTF-8> <title>js 复选框 全选都选 ...
- Date类型-演示JS中的日期
<script type="text/javascript"> /* *演示JS中的日期 */ var date = new Date(); document.writ ...
- js 时间戳转为日期格式
原文:js 时间戳转为日期格式 js 时间戳转为日期格式 什么是Unix时间戳(Unix timestamp): Unix时间戳(Unix timestamp),或称Unix时间(Unix time) ...
- JS全选功能代码优化
原文:JS全选功能代码优化 JS全选功能代码优化 最近在看javascript MVC那本书,也感觉到自己写的代码也并不优雅,所以一直在想 用另一种模式来编写JS代码,所以针对之前的简单的JS全选功能 ...
- js字符串转日期,js字符串解析成日期,js日期解析, Date.parse小时是8点,Date.parse时间多了8小时
js字符串转日期,js字符串解析成日期,js日期解析, Date.parse小时是8点,Date.parse时间多了8小时 >>>>>>>>>&g ...
- js强大的日期格式化函数,不仅可以格式化日期,还可以查询星期,一年中第几天等
js强大的日期格式化,timestamp支持10位或13位的时间戳,或是时间字符串,同时支持android ios的处理,不只是日期的格式化还有其它方法,比如获 获取某月有多少天 .获取某个日期在这一 ...
随机推荐
- Windows单击右键没有共享选项怎么办
文件共享是指在网络环境下文件.文件夹.某个硬盘分区使用时的一种设置属性,一般指多个用户可以同时打开或使用同一个文件或数据.但有时候也会遇到找不到共享选项的情况. Windows单击右键没有共享选项怎么 ...
- js判断是否为空的代码
方法一: var keyVal= $("#key").val(); if(keyVal==undefined || keyVal=="" || keyVal== ...
- CSS的权重(转)
CSS写的渐渐多了,他的权重问题就不得不昂首面对,之前一直得过且过的将就用着,直到最近遇到了几个大坑,一直割刺着我对前端的热情,得了得了,蒙不过去了,就发点时间记下来吧,当然还是一片转载的文章,有时候 ...
- NAS4Free 安装配置(三)基本配置
基本配置 在浏览器中输入地址,进入管理界面(我的是http://192.168.0.10) 登录界面 初始用户名:admin,初始密码:nas4free 首页 进入基本配置 这里可以选择语言,有中文, ...
- Nmap官网中众多文档如何查看
打开Nmap(nmap.org)官网后,会看多个关于文档的链接,熟悉之后会发现有三类,Reference Guide,Books,Docs.通过熟悉知道Doc是文档的入口,且下面是对Doc页面的翻译, ...
- Android平台上使用气压传感器计算海拔高度
气压传感器两年前已经开始被手机制造商运用在其设备上,但貌似没有引起开发者足够的重视.像Galaxy S III .Galaxy Note 2和小米2手机上都有,不过大家对于气压传感器比较陌生.其实大气 ...
- mac/unix系统:C++实现一个端口扫描器
在比较早以前,我用过S扫描器, 以及大名鼎鼎的nmap扫描器, 可以快速扫描某个主机开放的端口, 今天使用C实现这样一个软件, 编译环境为Mac, 系统版本10.11.6: #include < ...
- 树状数组(BIT)
i的二进制的最后一个1可以通过i&(-i)得到,时间复杂度o(logn).对于W*H的二维BIT只需要建立H个大小为x轴方向元素个数W的BIT,复杂度O(logW+logH).同样的方法可以扩 ...
- java设计模式--结构型模式--装饰模式
装饰模式 概述 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 适用性 1.在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职责. 2.处理 ...
- UESTC_Just a Maze CDOJ 1162
Just a Maze Time Limit: 3000/1000MS (Java/Others) Memory Limit: 262144/262144KB (Java/Others) Su ...