1. 项目需要一个可以选择多个日期的日期选择框,从网上找到一个单选的选择框源码
  2.  
  3. http://blog.5d.cn/user2/samuel/200503/61881.html),修改成可以多选。
  4.  
  5. 使用方法:
  6.  
  7. 调用方法很简单:
  8. <input type="text" name="dateBegin" onclick="calendarShow(this)" readonly>
  9.  
  10. 或者用button调用也行
  11.  
  12. <input type="text" name="dateBegin" readonly><button onclick="calendarShow(document.all.dateBegin)">选择日期</button>
  13.  
  14. 得到的结果(dateBeginValue值)是多个日期值,会使用";"进行间隔,如:2010-10-23;2010-12-24这样的。
  15.  
  16. 当然最开始的时候你也需要这样给这个栏位初始值。
  17.  
  18. 还有就是当初设计的哥哥比较黑,最大的月份是当前月份,我修改为了2999-12-31.
  19.  
  20. V1.1修改部分:
  21.  
  22. 1)增加两种新的调用方法
  23.  
  24. calendarShow1(this)==>设定只能输入一个日期
  25.  
  26. calendarShowN(this,n)==>自己设定最多可以输入的日期数,如果开始给那个栏位赋值就更多,就无法增加
  27.  
  28. calendarShow(this) ==>为了兼容性,默认最大的值为200,建议不要使用这个了
  29.  
  30. 2)Fix 闰年的Bug
  31.  
  32. 3)改为英文版
  33.  
  34. 增加两个function,一个为日期单选calendarShow1,一个为日期多选为calerdarShowM,后者还可以设定一个参数,允许最多的日期数。
  35.  
  36. //============================== 定义属性 ==========
  37. var calendarDisplay = false; //是否显示
  38. var yearBegin = 2004; //开始时间
  39. var yearEnd = 2999; //截至年
  40. var monthEnd = 12; //截至月
  41. var dayEnd = 31; //截至日
  42. var dayStrDef = "<table class=\"calendar\" width='100%' cellpadding='0' border='1' bordercolorlight='#C0C0C0' bordercolordark='#C0C0C0'><tr>";
  43. var dayStr = dayStrDef;
  44. var yearC = getNow(1);
  45. var monthC = getNow(2);
  46. var dayC = getNow(3);
  47. var dateFormat = "yyyy-MM-dd"; //自定义格式
  48. var dateObj; //和外部的交換控件
  49. var statStr = "";
  50. var dateList; //日期列表
  51. var maxLen=200;//日期的最大長度,如果沒有指定,為100
  52.  
  53. function getNow(dateType) {
  54. var dateTemp = new Date();
  55. switch (dateType) {
  56. case 0:
  57. nowTemp = dateTemp.getYear() + "-" + (dateTemp.getMonth() + 1) + "-" + dateTemp.getDate();
  58. break;
  59. case 1:
  60. nowTemp = dateTemp.getYear();
  61. break;
  62. case 2:
  63. nowTemp = dateTemp.getMonth();
  64. break;
  65. case 3:
  66. nowTemp = dateTemp.getDate();
  67. break;
  68. case 4:
  69. nowTemp = dateTemp.getDay();
  70. break;
  71. }
  72. return nowTemp;
  73. }
  74.  
  75. function createCalendar() {
  76. dayStr = dayStrDef;
  77. var lastDay = getLastDay(yearC, parseInt(monthC) + 1);
  78. var startDay = getWeekDay(yearC, parseInt(monthC) + 1, 1);
  79. var d = 1;
  80. for (w = 0; w <= lastDay + startDay - 1; w++) {
  81. if (w != 0 && w % 7 == 0) {
  82. dayStr += "</tr><tr>";
  83. }
  84. if (w >= startDay) {
  85. dayStr += "<td onclick='changeDateList(" + d + ");daySpace.innerHTML = createCalendar();' style='cursor:hand' onMouseOver='this.className=\"mouseOver\"' onMouseOut='this.className=\"mouseOut\"'>";
  86. if (isInDateList(d)) {
  87. dayStr += "<b><font color=red>";
  88. }
  89. dayStr += d;
  90. d++;
  91. }
  92. else {
  93. dayStr += "<td>";
  94. dayStr += " ";
  95. }
  96. }
  97. dayStr += "</tr></table>";
  98. return dayStr;
  99. }
  100.  
  101. function getWeekDay(year, month, day) {
  102. var d = new Date();
  103. d.setFullYear(year);
  104. d.setMonth(month - 1);
  105. d.setDate(day);
  106. s = d.getDay();
  107. return s;
  108. }
  109.  
  110. function getLastDay(year, month) {
  111. if (month < 8) {
  112. if (month % 2 != 0) {
  113. return 31;
  114. }
  115. if (month == 2) {
  116. if (year % 400 == 0 || (year % 100 !=0 && year %4 ==0 )) {
  117. return 29;
  118. }
  119. return 28;
  120. }
  121. else {
  122. return 30;
  123. }
  124. }
  125. if (month % 2 != 0) {
  126. return 30;
  127. }
  128. return 31;
  129. }
  130.  
  131. function one2two(d) {
  132. var s = d;
  133. if (d < 10) {
  134. s = "0" + d;
  135. }
  136. return s;
  137. }
  138.  
  139. function transferDate(day) {
  140. dayC = day;
  141. datevalue = dateFormat.replace("yyyy", yearC);
  142. datevalue = datevalue.replace("MM", one2two(parseInt(monthC) + 1));
  143. datevalue = datevalue.replace("dd", one2two(dayC));
  144. return datevalue;
  145. }
  146.  
  147. function selectCalendar(dateType, datevalue) {
  148. var d = new Date(yearC, monthC, dayC);
  149. if (dateType == "year") {
  150. year = parseInt(yearC) + datevalue;
  151. if (year >= yearEnd) {
  152. year = yearEnd;
  153. if (monthC > monthEnd) {
  154. d.setMonth(monthEnd);
  155. }
  156. }
  157. if (year < yearBegin) {
  158. year = yearBegin;
  159. }
  160. d.setFullYear(year);
  161. }
  162. if (dateType == "month") {
  163. month = parseInt(monthC) + datevalue;
  164. if (yearC >= yearEnd && month > monthEnd) {
  165. month = monthEnd;
  166. calendarState.innerHTML = "Max month";
  167. }
  168. if (yearC == yearBegin && month < 0) {
  169. month = 0;
  170. calendarState.innerHTML = "Min month";
  171. }
  172. d.setDate(1);
  173. d.setMonth(month);
  174. }
  175. yearC = d.getYear();
  176. monthC = d.getMonth();
  177. setCalendarDef();
  178. daySpace.innerHTML = createCalendar();
  179. }
  180.  
  181. function initDateList(dateObj) {
  182. var str = dateObj.value;
  183. if (str.trim() == "") {
  184. dateList = new Array();
  185. } else {
  186. dateList = str.split(";");
  187. }
  188. checkLength();
  189. }
  190.  
  191. function changeDateList(day) {
  192. var str1 = transferDate(day);
  193. for (i = 0; i < dateList.length; i++) {
  194. if (dateList[i] == str1) {
  195. dateList.splice(i, 1);
  196. saveDateList();
  197. return;
  198. }
  199. }
  200. if (checkLength()) {
  201. dateList[dateList.length] = str1;
  202. saveDateList();
  203. return;
  204. } else if (maxLen == 1) {
  205. dateList[0] = str1;
  206. saveDateList();
  207. return;
  208. }
  209. }
  210.  
  211. function checkLength() {
  212. if (dateList.length >= maxLen) {
  213. calendarState.innerHTML = "too long";
  214. return false;
  215. }
  216. return true;
  217. }
  218.  
  219. function saveDateList() {
  220. dateObj.value = dateList.join(";");
  221. }
  222.  
  223. function isInDateList(day) {
  224. var str1 = transferDate(day);
  225. for (i = 0; i < dateList.length; i++) {
  226. if (dateList[i] == str1) {
  227. return true;
  228. }
  229. }
  230. return false;
  231. }
  232.  
  233. function calendarShow(calendarObj) {
  234. if (calendarDisplay) {
  235. calendar.style.display = "none";
  236. dayStr = dayStrDef;
  237. return;
  238. }
  239. else {
  240. dateObj = calendarObj;
  241. calendar.style.display = "block";
  242. initDateList(dateObj);
  243. }
  244. createSelect(document.all.calendarYear, yearBegin, yearEnd, "year");
  245. createSelect(document.all.calendarMonth, 1, 12, "month");
  246. setCalendarDef();
  247. objL = document.body.scrollLeft + window.event.x - 10;
  248. objT = calendarObj.getBoundingClientRect().top + calendarObj.clientHeight;
  249. calendar.style.left = objL - 2;
  250. calendar.style.top = objT + 1;
  251. setCalendarvalue();
  252. daySpace.innerHTML = createCalendar();
  253. }
  254. function calendarShow1(calendarObj) {
  255. maxLen=1;
  256. calendarShow(calendarObj);
  257. }
  258. function calendarShowN(calendarObj, maxLength) {
  259. maxLen = maxLength;
  260. calendarShow(calendarObj);
  261.  
  262. }
  263.  
  264. function createSelect(selectObj, begin, end, selectType) {
  265. for (i = begin; i <= end; i++) {
  266. value = i;
  267. if (selectType == "month") {
  268. var value = i - 1;
  269. }
  270. selectObj.options[i - begin] = new Option(i, value);
  271. }
  272. }
  273.  
  274. function defSelect(selectObj, defvalue) {
  275. for (i = 0; i < selectObj.length; i++) {
  276. if (selectObj.options[i].value == defvalue) {
  277. selectObj.options[i].selected = true;
  278. return;
  279. }
  280. }
  281. }
  282.  
  283. function setCalendarvalue() {
  284. yearC = document.all.calendarYear.value;
  285. monthC = document.all.calendarMonth.value;
  286. daySpace.innerHTML = createCalendar();
  287. }
  288.  
  289. //================================================== Validate =====
  290. String.prototype.trim = function () { //String's Trim()
  291. return this.replace(/(^\s*)|(\s*$)/g, "");
  292. }
  293.  
  294. function isNull(strTemp) { //判断是否为空
  295. if (strTemp == null || strTemp.trim() == "") {
  296. return true;
  297. }
  298. return false;
  299. }
  300.  
  301. //=============================================================
  302. //================================================ Main() =====
  303. function setCalendarDef() {
  304. defSelect(document.all.calendarYear, yearC);
  305. defSelect(document.all.calendarMonth, monthC);
  306. }
  307.  
  308. function calendarHidden() {
  309. if (calendarDisplay) {
  310. calendarShow();
  311. calendarDisplay = false;
  312. }
  313. else if (calendar.style.display == "block") {
  314. calendarDisplay = true;
  315. }
  316. }
  317. document.onclick = calendarHidden;
  318. 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>";
  319. 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)\'\">";
  320. cStr += "<table class=\"calendar\" cellpadding='0' border='1' width='160' bordercolorlight='#000000' bordercolordark='#000000'>";
  321. cStr += "<tr><td colspan='7' bgcolor='#E1E1E1'>";
  322. 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>";
  323. cStr += " <select name=\"calendarYear\" onChange=\"setCalendarvalue()\"></select><select name=\"calendarMonth\" onChange=\"setCalendarvalue()\"></select> ";
  324. 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>";
  325. 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>";
  326. cStr += "<tr><td colspan=\"7\"><div id=\"daySpace\"></div></td></tr>";
  327. cStr += "<tr><td colspan=\"7\" bgcolor=\"#E1E1E1\"><table width=\"100%\" cellpadding='0'><tr><td width=\"60%\">";
  328. cStr += "<div style=\"font-family:Arial;font-size:8pt\" id=\"calendarState\" onDblclick=\"calendarState.innerHTML=''\" onMouseOut=\"calendarState.innerHTML='" + statStr + "'\">" + statStr + "</div>";
  329. 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>";
  330. document.write(cStr);

JS多选日期的更多相关文章

  1. [js开源组件开发]js多选日期控件

    js多选日期控件 详情请见:http://www.lovewebgames.com/jsmodule/calendar.html 它的github地址:https://github.com/tianx ...

  2. 腾讯云图片鉴黄集成到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 ...

  3. js快捷输入日期

    点击这里查看效果http://keleyi.com/keleyi/phtml/jstexiao/10.htm 以下式代码: <!DOCTYPE html> <html> < ...

  4. js 复选框 全选都选 如果某一个子复选框没选中 则全选按钮不选中

    <!DOCTYPE HTML> <html> <head> <meta charset=UTF-8> <title>js 复选框 全选都选 ...

  5. Date类型-演示JS中的日期

    <script type="text/javascript"> /* *演示JS中的日期 */ var date = new Date(); document.writ ...

  6. js 时间戳转为日期格式

    原文:js 时间戳转为日期格式 js 时间戳转为日期格式 什么是Unix时间戳(Unix timestamp): Unix时间戳(Unix timestamp),或称Unix时间(Unix time) ...

  7. JS全选功能代码优化

    原文:JS全选功能代码优化 JS全选功能代码优化 最近在看javascript MVC那本书,也感觉到自己写的代码也并不优雅,所以一直在想 用另一种模式来编写JS代码,所以针对之前的简单的JS全选功能 ...

  8. js字符串转日期,js字符串解析成日期,js日期解析, Date.parse小时是8点,Date.parse时间多了8小时

    js字符串转日期,js字符串解析成日期,js日期解析, Date.parse小时是8点,Date.parse时间多了8小时 >>>>>>>>>&g ...

  9. js强大的日期格式化函数,不仅可以格式化日期,还可以查询星期,一年中第几天等

    js强大的日期格式化,timestamp支持10位或13位的时间戳,或是时间字符串,同时支持android ios的处理,不只是日期的格式化还有其它方法,比如获 获取某月有多少天 .获取某个日期在这一 ...

随机推荐

  1. Java中通过递归调用删除文件夹下所有文件

    摘自 : http://blog.sina.com.cn/s/blog_79333b2c0100xiu4.html import java.io.File; public class FileTest ...

  2. No-args constructor for class does not exist. Register an InstanceCreator with G

    有时候我们在使用Googel官方的json解析包时,如果自己的实体类中出现代参的构造函数.在1.4的jar中,如果类造型中有参数,就会调用不了无参构造器,(如:HashMap的构造器就会有参数) 参考 ...

  3. phantomjs 渲染

    phantomjs 可以将web页面渲染并保存为扩展名为PNG,GIF,JPEG,PDF的指定文件 render viewportSize可以改变可视窗体大小 zoomFactor调整缩放比例 cli ...

  4. 【劳动节江南白衣Calvin 】我的后端开发书架2015

    自从技术书的书架设定为”床底下“之后,又多了很多买书的空间.中国什么都贵,就是书便宜. 不定期更新,在碎片化的阅读下难免错评. 书架主要针对Java后端开发,书单更偏爱那些能用简短流畅的话,把少壮不努 ...

  5. hibernate集合映射inverse和cascade详解

    hibernate集合映射inverse和cascade详解   1.到底在哪用cascade="..."? cascade属性并不是多对多关系一定要用的,有了它只是让我们在插入或 ...

  6. JavaScript可否多线程? 深入理解JavaScript定时机制(转载)

    说明:最近写 js 时需要用setinterval函数做定时操作,谁知道,刚开始后运行完好,但一段时间后他就抽风了,定时任务运行的时间间隔越来越短,频率加快,这是一个完全不能容忍的问题,带着一个可以出 ...

  7. PHP第三节笔记

    ●为什么要安装web服务器,和怎么样去了解发送和接受到什么? 1.因为我们的浏览器要取数据,数据是从服务器取出来的. 2.我们可以通过httpwatch工具来获取发送和接收的数据,有利于我们了解的更加 ...

  8. [TYVJ] P1002 谁拿了最多奖学金

    谁拿了最多奖学金 背景 Background NOIP2005复赛提高组第一题   描述 Description 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同 ...

  9. Effective Java提升Code Coverage代码涵盖率 - 就是爱Java

    虽然我们已经有了测试程序,但是如何得知是否已完整测试了主程序?,透过Code Coverage代码涵盖率,我们可以快速地得知,目前系统中,有多少程序中被测试过,不考虑成本跟投资效益比,涵盖率越高,代表 ...

  10. LightOj 1230 Placing Lampposts(树形DP)

    题意:给定一个森林.每个节点上安装一个灯可以覆盖与该节点相连的所有边.选择最少的节点数num覆盖所有的边.在num最小的前提下,合理放置num个灯使得被两个灯覆盖的边最多? 思路:F[i][0]代表没 ...