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多选日期

时间: 2024-10-24 21:19:15

JS多选日期的相关文章

js多选日期控件

js多选日期控件 详情请见:http://www.lovewebgames.com/jsmodule/calendar.html 它的github地址:https://github.com/tianxiangbing/calendar calendar js日历控件 用法 1 <input type="text" id="calendar" value="2015-04-15"/> 2 <script src="../

js 时间戳转为日期格式

js 时间戳转为日期格式 什么是Unix时间戳(Unix timestamp): Unix时间戳(Unix timestamp),或称Unix时间(Unix time).POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数.Unix时间戳不仅被使用在Unix系统.类Unix系统中,也在许多其他操作系统中被广泛采用. 目前相当一部分操作系统使用32位二进制数字表示时间.此类系统的Unix时间戳最多可以使用到格林威治

js转换Date日期格式

有时候做项目会用到js的date日期格式,因为Date()返回的格式不是我们需要的, Date()返回格式: Thu Mar 19 2015 12:00:00 GMT+0800 (中国标准时间) 而我们则需要这样的格式: 2015-3-19 12:00:00 除非是在后台处理好时间格式,然后在页面直接显示. 那如何用js格式化date日期值呢? 1.js方法返回值:2015-03-19 var formatDate = function (date) { var y = date.getFull

js 格式化时间日期函数小结

下面是脚本之家为大家整理的一些格式化时间日期的函数代码,需要的朋友可以参考下. 代码如下: Date.prototype.format = function(format){ var o = { "M+" : this.getMonth()+1, //month "d+" : this.getDate(), //day "h+" : this.getHours(), //hour "m+" : this.getMinutes(

js时间戳转为日期格式

这个在php+mssql(日期类型为datetime)+ajax的时候才能用到,js需要把时间戳转为为普通格式,一般的情况下可能用不到 [php] view plaincopy <script> function getLocalTime(nS) { return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' '); } alert(getLocalTime(1293072805)); </scr

JS全选功能代码优化

最近在看javascript MVC那本书,也感觉到自己写的代码也并不优雅,所以一直在想 用另一种模式来编写JS代码,所以针对之前的简单的JS全选功能来做个简单的demo,使用目前现在的编码方式来重新编码,当然以后会一直用这种方式来编写自己的代码.下面是如下代码: JS所有代码: /** * JS全选 * @class Checkall * @param {Object} cfg * @param {Element|selector} [cfg.container] 限定全选的容器 * @par

js获取实时日期和时间

//在相应位置显示时间日期 <div style=" width:400px; height:50px">    <span id="showtime"></span>     <!--走马灯文字 <marquee direction="left">需要滚动的内容</marquee>-->    </div></body> js获取时间日期 <s

JS nodeJs 的日期计算

date-utils 前端引用 <script type="text/javascript" src="date-utils.min.js"></script> 下载传送门,猛击我 NODEJS服务端项目调用 $ cnpm install date-utils require('date-utils'); nodejs版本要求>0.6 API : Static Methods 静态方法 Date.today(); // today, 0

简单JS全选、反选代码

1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2<html xmlns="http://www.w3.org/1999/xhtml"> 3<head> 4<meta http-equiv="Cont