easyui datebox 月开始结束时间联动带限制

//#region 开始~结束时间  开始时间控件ID , 结束时间控件ID , 间隔几个月
function InitBeginEndTime(beginid, endid, limit) {
    //初始化时间
    $(beginid).datebox({
        //value: strattime,
        //readonly: true,
        //显示日趋选择对象后再触发弹出月份层的事件,初始化时没有生成月份层
        onShowPanel: function () {
            //触发click事件弹出月份层
            span.trigger('click');
            if (!tds)
                //延时触发获取月份对象,因为上面的事件触发和对象生成有时间间隔
                setTimeout(function () {
                    tds = p.find('div.calendar-menu-month-inner td');
                    tds.click(function (e) {
                        //禁止冒泡执行easyui给月份绑定的事件
                        e.stopPropagation();
                        //得到年份
                        var year = /\d{4}/.exec(span.html())[0],
                            //月份
                            //之前是这样的month = parseInt($(this).attr('abbr'), 10) + 1; 
                            month = parseInt($(this).attr('abbr'), 10);
                        //隐藏日期对象并设置日期                  
                        $(beginid).datebox('hidePanel').datebox('setValue', year + '-' + month);
                        var endtime = $(endid).datebox('getValue');
                        var ym = new Date(year + "/" + month + "/01 00:00:00")
                        var date = new Date(endtime + "/01 00:00:00");
                        var y = date.getFullYear();
                        var m = date.getMonth() + 1;
                        if (date < ym) {
                            $(beginid).datebox('setValue', y + '-' + m);
                        } else {
                            if (limit != -1) {
                                $(endid).datebox('setValue', addDate(ym, limit));
                            }
                        }
                    });
                }, 0);
        },
        //配置parser,返回选择的日期
        parser: function (s) {
            if (!s) return new Date();
            var arr = s.split('-');
            return new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, 1);
        },
        //配置formatter,只返回年月 之前是这样的d.getFullYear() + '-' +(d.getMonth());
        formatter: function (d) {
            var currentMonth = (d.getMonth() + 1);
            var currentMonthStr = currentMonth < 10 ? ('0' + currentMonth) : currentMonth.toString();
            return d.getFullYear() + '-' + currentMonthStr;
        }
    });
    //日期选择对象
    var p = $(beginid).datebox('panel'),
        //日期选择对象中月份
        tds = false,
        //显示月份层的触发控件
        span = p.find('span.calendar-text');

    //设置开始时间
    var date = new Date();
    if (limit != -1) {
        $(beginid).datebox('setValue', addDate(date, -limit));
    } else {
        $(beginid).datebox('setValue', addDate(date, 0));
    }
    //初始化时间
    $(endid).datebox({
        //显示日趋选择对象后再触发弹出月份层的事件,初始化时没有生成月份层
        onShowPanel: function () {
            //触发click事件弹出月份层
            espan.trigger('click');
            if (!etds)
                //延时触发获取月份对象,因为上面的事件触发和对象生成有时间间隔
                setTimeout(function () {
                    etds = ep.find('div.calendar-menu-month-inner td');
                    etds.click(function (e) {
                        //禁止冒泡执行easyui给月份绑定的事件
                        e.stopPropagation();
                        //得到年份
                        var year = /\d{4}/.exec(espan.html())[0],
                            //月份
                            //之前是这样的month = parseInt($(this).attr('abbr'), 10) + 1; 
                            month = parseInt($(this).attr('abbr'), 10);

                        var d = new Date();
                        if (year >= d.getFullYear() && month > d.getMonth() + 1) {
                            year = d.getFullYear();
                            month = d.getMonth() + 2;
                        }
                        //隐藏日期对象并设置日期                  
                        $(endid).datebox('hidePanel').datebox('setValue', year + '-' + month);
                        var begtime = $(beginid).datebox('getValue');
                        begtime = begtime.replace('-', '/');
                        var ym = new Date(year + "/" + month + "/01 00:00:00")
                        var date = new Date(begtime + "/01 00:00:00");
                        var y = date.getFullYear();
                        var m = date.getMonth() + 1;
                        if (date > ym) {
                            $(endid).datebox('setValue', y + '-' + m);
                        }
                        if (limit != -1) {
                            var ym = new Date(year + "/" + month + "/01 00:00:00")
                            $(beginid).datebox('setValue', addDate(ym, -limit));
                        }
                    });
                }, 0);
        },
        //配置parser,返回选择的日期
        parser: function (s) {
            if (!s) return new Date();
            var arr = s.split('-');
            return new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, 1);
        },
        //配置formatter,只返回年月 之前是这样的d.getFullYear() + '-' +(d.getMonth());
        formatter: function (d) {
            var currentMonth = (d.getMonth() + 1);
            var currentMonthStr = currentMonth < 10 ? ('0' + currentMonth) : currentMonth.toString();
            return d.getFullYear() + '-' + currentMonthStr;
        }
    });
    //日期选择对象
    var ep = $(endid).datebox('panel'),
        //日期选择对象中月份
        etds = false,
        //显示月份层的触发控件
        espan = ep.find('span.calendar-text');

    //设置结束时间
    var date = new Date();
    $(endid).datebox('setValue', addDate(date, 0));
}
//获取自定义时间
function addDate(date, mon) {
    var d = new Date(date);
    d.setMonth(d.getMonth() + mon);
    var month = d.getMonth() + 1;
    var day = d.getDate();
    if (month < 10) {
        month = "0" + month;
    }
    if (day < 10) {
        day = "0" + day;
    }
    var val = d.getFullYear() + "-" + month;
    return val;
}
//#endregion
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值