/** 
 | 
 * autor: xuxiao , zubaoshan 
 | 
 */ 
 | 
(function () { 
 | 
    //定义一些默认参数 
 | 
    var _options = { 
 | 
        ZH: { 
 | 
            dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], 
 | 
            shortDayNames: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'], 
 | 
            monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], 
 | 
            shortMonthNames: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] 
 | 
        }, 
 | 
        US: { 
 | 
            dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], 
 | 
            shortDayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], 
 | 
            monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], 
 | 
            shortMonthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] 
 | 
        } 
 | 
    } 
 | 
  
 | 
    //定义一些api 
 | 
    var _date_format_api = { 
 | 
  
 | 
        /** 
 | 
         * 格式化时间 
 | 
         * @param date 
 | 
         * @param fmt 
 | 
         * @returns {*} 
 | 
         */ 
 | 
        format: function (date, fmt) { 
 | 
            var o = { 
 | 
                'M+': date.getMonth() + 1, //月份 
 | 
                'd+': date.getDate(), //日 
 | 
                'h+': date.getHours(), //小时 
 | 
                'm+': date.getMinutes(), //分 
 | 
                's+': date.getSeconds(), //秒 
 | 
                'q+': Math.floor((date.getMonth() + 3) / 3), //季度 
 | 
                'S': date.getMilliseconds() //毫秒 
 | 
            }; 
 | 
            if(!this.isNotEmpty(fmt)){ 
 | 
                fmt = 'yyyy-MM-dd hh:mm:ss'; 
 | 
            } 
 | 
            if (/(y+)/.test(fmt)) { 
 | 
                fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)); 
 | 
            } 
 | 
            for (var k in o) { 
 | 
                if (new RegExp('(' + k + ')').test(fmt)) { 
 | 
                    fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))); 
 | 
                } 
 | 
            } 
 | 
            return fmt; 
 | 
        }, 
 | 
  
 | 
        formatToDate: function (dateStr) { 
 | 
            if(this.isNotEmpty(dateStr) ){ 
 | 
                return new Date(Date.parse(dateStr.replace(/-/g,   "/"))); 
 | 
            } 
 | 
            return ''; 
 | 
        }, 
 | 
  
 | 
        /** 
 | 
         * 得到一天的开始 date类型 
 | 
         * @param date 
 | 
         */ 
 | 
        getDateStart: function (date) { 
 | 
            var fmt = 'yyyy-MM-dd'; 
 | 
            var dateStartStr = this.getDateStartStr(date, fmt); 
 | 
            var startTime = new Date(Date.parse(dateStartStr)); 
 | 
            return startTime; 
 | 
        }, 
 | 
  
 | 
        /** 
 | 
         * 得到一天的开始 str 类型 
 | 
         * @param date 
 | 
         */ 
 | 
        getDateStartStr: function (date, fmt) { 
 | 
            if (typeof fmt == 'undefined') { 
 | 
                fmt = 'yyyy-MM-dd'; 
 | 
            } 
 | 
            var dateStr = this.format(date, fmt); 
 | 
            dateStr += ' 00:00:00'; 
 | 
            return dateStr; 
 | 
        }, 
 | 
  
 | 
        /** 
 | 
         * 得到一天的结束 date类型 
 | 
         * @param date 
 | 
         */ 
 | 
        getDateEnd: function (date) { 
 | 
            var fmt = 'yyyy-MM-dd'; 
 | 
            var dateEndStr = this.getDateEndStr(date, fmt); 
 | 
            var endTime = new Date(Date.parse(dateEndStr)); 
 | 
            return endTime; 
 | 
        }, 
 | 
  
 | 
        /** 
 | 
         * 得到一天的结束 str 类型 
 | 
         * @param date 
 | 
         */ 
 | 
        getDateEndStr: function (date, fmt) { 
 | 
            if (typeof fmt == 'undefined') { 
 | 
                fmt = 'yyyy-MM-dd'; 
 | 
            } 
 | 
            var endStr = this.format(date, fmt); 
 | 
            endStr += ' 23:59:59'; 
 | 
            return endStr; 
 | 
        }, 
 | 
  
 | 
        /** 
 | 
         * 两个时间比较大小 
 | 
         * @param d1 
 | 
         * @param d2 
 | 
         */ 
 | 
        compareDate: function (d1, d2) { 
 | 
            if (d1 && d2) { 
 | 
                if (d1.getTime() > d2.getTime()) { 
 | 
                    return 1; 
 | 
                } else if (d1.getTime() == d2.getTime()) { 
 | 
                    return 0; 
 | 
                } else if (d1.getTime() < d2.getTime()) { 
 | 
                    return -1; 
 | 
                } 
 | 
            } 
 | 
        }, 
 | 
  
 | 
        /** 
 | 
         * 得到星期几, 支持中英 
 | 
         * @param date 
 | 
         * @param type 
 | 
         * @returns {string} 
 | 
         */ 
 | 
        getWeek: function (date, type) { 
 | 
            if (date) { 
 | 
                if (!this.isNotEmpty(type)) { 
 | 
                    type = 0; 
 | 
                } 
 | 
                var index = date.getDay(); 
 | 
                var dateStr = ''; 
 | 
                switch (type) { 
 | 
                    case this.WEEKTYPE.ZH_DAYNAME: 
 | 
                        dateStr = _options.ZH.dayNames[index]; 
 | 
                        break; 
 | 
                    case this.WEEKTYPE.ZH_SDAYNAME: 
 | 
                        dateStr = _options.ZH.shortDayNames[index]; 
 | 
                        break; 
 | 
                    case this.WEEKTYPE.US_DAYNAME: 
 | 
                        dateStr = _options.US.dayNames[index]; 
 | 
                        break; 
 | 
                    case this.WEEKTYPE.US_SDAYNAME: 
 | 
                        dateStr = _options.US.shortDayNames[index]; 
 | 
                        break; 
 | 
                } 
 | 
                return dateStr; 
 | 
            } 
 | 
        }, 
 | 
  
 | 
        /** 
 | 
         * 是否为闰年 
 | 
         * @param date 
 | 
         * @returns {boolean} 
 | 
         */ 
 | 
        isLeapYear: function (date) { 
 | 
            if (date instanceof Date) { 
 | 
                return (0 == date.getYear() % 4 && (( date.getYear() % 100 != 0) || (date.getYear() % 400 == 0))); 
 | 
            } 
 | 
            console.warn('argument format is wrong'); 
 | 
            return false; 
 | 
        }, 
 | 
  
 | 
        /** 
 | 
         * 字符串是否为正确的时间格式,支持 - / 
 | 
         * @param dateStr 
 | 
         * @returns {boolean} 
 | 
         */ 
 | 
        isValidDate: function (dateStr) { 
 | 
            if (this.isNotEmpty(dateStr)) { 
 | 
                var r= dateStr.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/); 
 | 
                if(r==null){ 
 | 
                    return false; 
 | 
                } 
 | 
                var d=new Date(r[1],r[3]-1,r[4]); 
 | 
                var num = (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]); 
 | 
                return (num!=0); 
 | 
            } 
 | 
        }, 
 | 
  
 | 
        /** 
 | 
         * 增加天数 
 | 
         * @param date 
 | 
         * @param dayNum 
 | 
         */ 
 | 
        addDay: function (date, dayNum) { 
 | 
            if(this.isNotEmpty(date) && this.isNotEmpty(dayNum) && date instanceof Date && typeof dayNum == 'number'){ 
 | 
                date.setDate(date.getDate() + dayNum); 
 | 
            }else{ 
 | 
                console.warn('date or dayNum format wrong'); 
 | 
            } 
 | 
            return date; 
 | 
        }, 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
        addDayStr: function (dateStr, dayNum) { 
 | 
            var date =''; 
 | 
            if(this.isNotEmpty(dateStr) && this.isNotEmpty(dayNum) && typeof dayNum == 'number'){ 
 | 
                date = this.formatToDate(dateStr); 
 | 
                date.setDate(date.getDate() + dayNum); 
 | 
            }else{ 
 | 
                console.warn('dateStr or dayNum format wrong'); 
 | 
            } 
 | 
            return date; 
 | 
        }, 
 | 
  
 | 
        /** 
 | 
         * 增加月份 
 | 
         * @param date 
 | 
         * @param dayNum 
 | 
         */ 
 | 
        addMonth: function (date, monthNum) { 
 | 
            if(this.isNotEmpty(date) && this.isNotEmpty(monthNum) && date instanceof Date && typeof monthNum == 'number'){ 
 | 
                date.setMonth(date.getMonth() + monthNum); 
 | 
            }else{ 
 | 
                console.warn('date or monthNum format wrong'); 
 | 
            } 
 | 
            return date; 
 | 
        }, 
 | 
  
 | 
        addMonthStr: function (dateStr, monthNum) { 
 | 
            var date =''; 
 | 
            if(this.isNotEmpty(dateStr) && this.isNotEmpty(monthNum) && typeof monthNum == 'number'){ 
 | 
                date = this.formatToDate(dateStr); 
 | 
                date.setMonth(date.getMonth() + monthNum); 
 | 
            }else{ 
 | 
                console.warn('date or monthNum format wrong'); 
 | 
            } 
 | 
            return date; 
 | 
        }, 
 | 
  
 | 
        /** 
 | 
         * 增加年份 
 | 
         * @param date 
 | 
         * @param dayNum 
 | 
         */ 
 | 
        addYear: function (date, yearNum) { 
 | 
            if(this.isNotEmpty(date) && this.isNotEmpty(yearNum) && date instanceof Date && typeof yearNum == 'number'){ 
 | 
                date.setYear(date.getFullYear() + yearNum); 
 | 
            }else{ 
 | 
                console.warn('date or yearNum format wrong'); 
 | 
            } 
 | 
            return date; 
 | 
        }, 
 | 
  
 | 
        addYearStr: function (dateStr, yearNum) { 
 | 
            var date = ''; 
 | 
            if(this.isNotEmpty(dateStr) && this.isNotEmpty(yearNum) && typeof yearNum == 'number'){ 
 | 
                date = this.formatToDate(dateStr); 
 | 
                date.setYear(date.getFullYear() + yearNum); 
 | 
            }else{ 
 | 
                console.warn('date or yearNum format wrong'); 
 | 
            } 
 | 
            return date; 
 | 
        }, 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
        /** 
 | 
         * 是否为空 
 | 
         * @param str 
 | 
         * @returns {boolean} 
 | 
         */ 
 | 
        isNotEmpty: function (str) { 
 | 
            if (str != '' && str != null && typeof str != 'undefined') { 
 | 
                return true; 
 | 
            } 
 | 
            console.warn('argument format is wrong'); 
 | 
            return false; 
 | 
        }, 
 | 
  
 | 
        //定义内部常量 
 | 
        WEEKTYPE: { 
 | 
            ZH_DAYNAME: 0, 
 | 
            ZH_SDAYNAME: 1, 
 | 
            US_DAYNAME: 2, 
 | 
            US_SDAYNAME: 3, 
 | 
        } 
 | 
  
 | 
  
 | 
    } 
 | 
    //这里确定了插件的名称 
 | 
    this.DateFormat = _date_format_api; 
 | 
})(); 
 |