08335 / hivui-platform-template
hivui平台项目模板
Newer
Older
hivui-platform-template / project / hivuiBirt / funclib / DateUtil.js

export const DateUtil = {
    timeSchemeKey: {
        "today": "today",
        "yesterday": "yesterday",
        "week": "week",
        "month": "month",
        "premonth": "premonth",
        "quarter": "quarter",
        "year": "year",
        "days7": "days7",
        "days28": "days28",
        "days84": "days84",
        "halfyear": "halfyear",
        "oneyear": "oneyear"
    },
    /**
       * showdoc
      * @catalog API/工具/Date
       * @title 日期格式化
       * @description 将条件转成字符结果
       * @url format(date, format)
       * @method $instance.format(date, format)
       * @param date 必选 Date|String 需要格式化日期
       * @param format 必选 String 格式化类型
       * @return Date
       * @number 60  
       */
    format: function (date, format = "yyyy-MM-dd hh:mm:ss") {
        if (!date) return;
        if (typeof date == "string")
            date = DateUtil.strToDate(date);
        format = format.replace(/HH/, "hh");
        var o = {
            "M+": date.getMonth() + 1, // month
            "d+": date.getDate(), // day
            "D+": date.getDate(), // day
            "h+": date.getHours(), // hour
            "H+": date.getHours(), // hour
            "m+": date.getMinutes(), // minute
            "s+": date.getSeconds(), // second
            "q+": Math.floor((date.getMonth() + 3) / 3), // quarter
            "S": date.getMilliseconds()
            // millisecond
        }
        if (/(y+)/.test(format))
            format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4
                - RegExp.$1.length));
        if (/(Y+)/.test(format))
            format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4
                - RegExp.$1.length));
        for (var k in o)
            if (new RegExp("(" + k + ")").test(format))
                format = format.replace(RegExp.$1, RegExp.$1.length == 1
                    ? o[k]
                    : ("00" + o[k]).substr(("" + o[k]).length));
        return format;
    },
    /**
       * showdoc
      * @catalog API/工具/Date
       * @title dt1与dt2日期之间:毫秒差间隔
       * @description dt1与dt2日期之间毫秒差间隔
       * @url milliSecondsBetween(dt1, dt2)
       * @method $instance.milliSecondsBetween(dt1, dt2)
       * @param dt1 必选 Date|String 日期时间1
       * @param dt2 必选 Date|String 日期时间2
       * @return Int
       * @number 60  
       */
    milliSecondsBetween: function (dt1, dt2) {
        if (typeof dt1 == "string")
            dt1 = DateUtil.strToDate(dt1);
        if (typeof dt2 == "string")
            dt2 = DateUtil.strToDate(dt2);
        return Math.abs(dt1.getTime() - dt2.getTime());
    },
    /**
       * showdoc
      * @catalog API/工具/Date
       * @title dt1与dt2日期之间:秒差间隔
       * @description dt1与dt2日期之间秒差间隔
       * @url secondsBetween(dt1, dt2)
       * @method $instance.secondsBetween(dt1, dt2)
       * @param dt1 必选 Date|String 日期时间1
       * @param dt2 必选 Date|String 日期时间2
       * @return Int
       * @number 60  
       */
    secondsBetween: function (dt1, dt2) {
        if (typeof dt1 == "string")
            dt1 = DateUtil.strToDate(dt1);
        if (typeof dt2 == "string")
            dt2 = DateUtil.strToDate(dt2);
        if (!dt1 || !dt2)
            return null;
        return Math.abs((dt1.getTime() - dt2.getTime()) / 1000);
    },
    /**
       * showdoc
      * @catalog API/工具/Date
       * @title dt1与dt2日期之间分差间隔
       * @description dt1与dt2日期之间分差间隔
       * @url minutesBetween(dt1, dt2)
       * @method $instance.minutesBetween(dt1, dt2)
       * @param dt1 必选 Date|String 日期时间1
       * @param dt2 必选 Date|String 日期时间2
       * @return Int
       * @number 60  
       */
    // 分差
    minutesBetween: function (dt1, dt2) {
        if (typeof dt1 == "string")
            dt1 = DateUtil.strToDate(dt1);
        if (typeof dt2 == "string")
            dt2 = DateUtil.strToDate(dt2);
        if (!dt1 || !dt2)
            return null;
        return Math.floor(Math.abs((dt1.getTime() - dt2.getTime())
            / (1000 * 60)));
    },
    /**
       * showdoc
      * @catalog API/工具/Date
       * @title dt1与dt2日期之间时差间隔
       * @description dt1与dt2日期之间时差间隔
       * @url hoursBetween(dt1, dt2)
       * @method $instance.hoursBetween(dt1, dt2)
       * @param dt1 必选 Date|String 日期时间1
       * @param dt2 必选 Date|String 日期时间2
       * @return Int
       * @number 60  
       */
    // 小时差
    hoursBetween: function (dt1, dt2) {
        if (typeof dt1 == "string")
            dt1 = DateUtil.strToDate(dt1);
        if (typeof dt2 == "string")
            dt2 = DateUtil.strToDate(dt2);
        if (!dt1 || !dt2)
            return null;
        return Math.floor(Math.abs((dt1.getTime() - dt2.getTime())
            / (1000 * 3600)));
    },
    /**
       * showdoc
      * @catalog API/工具/Date
       * @title dt1与dt2日期之间天差间隔
       * @description dt1与dt2日期之间天差间隔
       * @url daysBetween(dt1, dt2)
       * @method $instance.daysBetween(dt1, dt2)
       * @param dt1 必选 Date|String 日期时间1
       * @param dt2 必选 Date|String 日期时间2
       * @return Int
       * @number 60  
       */
    daysBetween: function (dt1, dt2) {
        if (typeof dt1 == "string")
            dt1 = DateUtil.strToDate(dt1);
        if (typeof dt2 == "string")
            dt2 = DateUtil.strToDate(dt2);
        if (!dt1 || !dt2)
            return null;
        return Math.floor(Math.abs((dt1.getTime() - dt2.getTime())
            / (1000 * 3600 * 24)));
    },
    /**
       * showdoc
      * @catalog API/工具/Date
       * @title dt1与dt2日期之间月差间隔
       * @description dt1与dt2日期之间月差间隔
       * @url daysBetween(dt1, dt2)
       * @method $instance.daysBetween(dt1, dt2)
       * @param dt1 必选 Date|String 日期时间1
       * @param dt2 必选 Date|String 日期时间2
       * @return Int
       * @number 60  
       */
    monthsBetween: function (dt1, dt2) {
        if (typeof dt1 == "string")
            dt1 = DateUtil.strToDate(dt1);
        if (typeof dt2 == "string")
            dt2 = DateUtil.strToDate(dt2);
        if (!dt1 || !dt2)
            return null;
        return Math.abs((dt1.getFullYear() - dt2.getFullYear()) * 12)
            + Math.abs(dt1.getMonth() - dt2.getMonth());
    },
    /**
       * showdoc
      * @catalog API/工具/Date
       * @title dt1与dt2日期之间年差间隔
       * @description dt1与dt2日期之间年差间隔
       * @url yearsBetween(dt1, dt2)
       * @method $instance.yearsBetween(dt1, dt2)
       * @param dt1 必选 Date|String 日期时间1
       * @param dt2 必选 Date|String 日期时间2
       * @return Int
       * @number 60  
       */
    yearsBetween: function (dt1, dt2) {
        if (typeof dt1 == "string")
            dt1 = DateUtil.strToDate(dt1);
        if (typeof dt2 == "string")
            dt2 = DateUtil.strToDate(dt2);
        if (!dt1 || !dt2)
            return null;
        return Math.abs(dt1.getFullYear() - dt2.getFullYear());
    },

    /**
       * showdoc
      * @catalog API/工具/Date
       * @title 获取中文星期
       * @description 获取中文星期
       * @url getWeekCn(dt)
       * @method $instance.getWeekCn(dt)
       * @param dt 必选 Date|String 日期时间
       * @return String
       * @number 60  
       */
    getWeekCn: function (dt) {
        var dayNames = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五",
            "星期六");
        if (typeof dt == "string")
            dt = DateUtil.strToDate(dt);
        return dayNames[dt.getDay()];
    },
    /**
       * showdoc
      * @catalog API/工具/Date
       * @title 获取数字星期
       * @description 获取数字星期
       * @url getWeek(dt)
       * @method $instance.getWeek(dt)
       * @param dt 必选 Date|String 日期时间
       * @return String
       * @number 60  
       */
    getWeek: function (dt) {
        if (typeof dt == "string")
            dt = DateUtil.strToDate(dt);
        return dt.getDay();
    },
    /**
       * showdoc
      * @catalog API/工具/Date
       * @title 是否时间日期
       * @description 是否时间日期
       * @url isDateTime(dateString)
       * @method $instance.isDateTime(dateString)
       * @param dateString 必选 Date|String 日期时间
       * @return boolean
       * @number 60  
       */
    isDateTime: function (dateString) {
        if (dateString.trim() == "")
            return false;
        // 年月日时分秒正则表达式
        var r = dateString
            .match(/^(\d{1,4})\-(\d{1,2})\-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/);
        var r1 = dateString
            .match(/^(\d{1,4})\-(\d{1,2})\-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2}).(\d{1,6})$/);
        var r2 = dateString
            .match(/^(\d{1,4})\-(\d{1,2})\-(\d{1,2}) (\d{1,2}):(\d{1,2})$/);
        if (r == null && r1 == null && r2 == null) {
            return false;
        }
        r = r || r1 || r2;
        if (r.length == 6) {// 时间格式为:2018-04-11 17:31
            var d1 = new Date(r[1], r[2] - 1, r[3], r[4], r[5]);
            let num = (d1.getFullYear() == r[1] && (d1.getMonth() + 1) == r[2]
                && d1.getDate() == r[3] && d1.getHours() == r[4] && d1
                    .getMinutes() == r[5]);
            if (num == 0) {
                return false;
            } else
                return true;
        }

        var d = new Date(r[1], r[2] - 1, r[3], r[4], r[5], r[6]);
        let num = (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[2]
            && d.getDate() == r[3] && d.getHours() == r[4]
            && d.getMinutes() == r[5] && d.getSeconds() == r[6]);
        if (num == 0) {
            return false;
        }
        return (num != 0);
    },
    /**
       * showdoc
      * @catalog API/工具/Date
       * @title 是否日期类型
       * @description 是否日期类型
       * @url isDate(dateString)
       * @method $instance.isDate(dateString)
       * @param dateString 必选 Date|String 日期时间
       * @return boolean
       * @number 60  
       */
    isDate: function (dateString) {
        if (dateString == "")
            return true;
        // 年月日正则表达式
        var r = dateString.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]);
        let num = (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d
            .getDate() == r[4]);
        if (num == 0) {
            return false;
        }
        return (num != 0);
    },
    dateof: function (dt, type) {
        let result;
        if (!dt)
            return "";
        if (typeof dt == "string")
            dt = DateUtil.strToDate(dt);
        switch (type) {
            case "y":
                result = dt.getFullYear();
                break;
            case "m":
                result = dt.getMonth() + 1;
                break;
            case "min":
                result = dt.getMinutes();
                break;
            case "time":
                result = DateUtil.format("yyyy-MM-dd hh:mm:ss");
                break;
            case "date":
                result = DateUtil.format('yyyy-MM-dd');
                break;
            case "weekCn":
                result = dt.week();
                break;
            case "week":
                result = dt.getDay();
                break;
            case "weekInYear":
                var first = new Date(dt.getFullYear(), 0, 1);
                var n = parseInt("1065432".charAt(first.getDay()));
                n = dt.getTime() - first.getTime() - n * 24 * 60 * 60 * 1000;
                n = Math.ceil(n / (7 * 24 * 60 * 60 * 1000));
                result = first.getDay() != 1 ? (n + 1) : n;
                break;
            default:
                result = "";
        }
        return result;
    },
    /**
   * showdoc
  * @catalog API/工具/Date
   * @title 字符转换指定日期类型
   * @description 字符转换指定日期类型
   * @url strFormatDate(strDate,strFormat)
   * @method $instance.strFormatDate(strDate,strFormat)
   * @param strDate 必选 String 日期时间
   * @param strFormat 必选 String 格式化类型
   * @return Date
   * @number 60  
   */
    strFormatDate: function (strDate, strFormat) {
        if (strDate == "" || strDate == null)
            return "";
        let d = DateUtil.strToDate(strDate);
        if (!strFormat)
            return d;
        return d.format(strFormat);
    },
    /**
   * showdoc
  * @catalog API/工具/Date
   * @title 字符转换日期类型
   * @description 字符转换日期类型
   * @url strToDate(dataStr)
   * @method $instance.strToDate(dataStr)
   * @param dataStr 必选 String 日期时间
   * @return Date
   * @number 60  
   */
    strToDate: function (dataStr) {
        if (!dataStr)
            return "";
        if (dataStr && dataStr.constructor === Date) { // 2010.08.02
            // 已经是时间类型,就不过滤。
            return dataStr;
        }
        if (typeof dataStr == "string") {
            if (dataStr.indexOf('.') > -1) // 2010.07.13 08335 cai
                dataStr = dataStr.split('.')[0];
        }
        // 只有时间字符串 01521
        if (dataStr.indexOf("-") == -1 && dataStr.indexOf(".") == -1
            && dataStr.indexOf(":") != -1)
            dataStr = DateUtil.dateOf(new Date()) + " " + dataStr;

        var arr = dataStr.split(/[- :]/)
        if (dataStr != "" && arr.length == 1) { // 当:dataStr:1,返回:2010-01-01
            // 00:00:00
            console.log(dataStr + " Invalid Date")
            return "";
        }

        return new Date(Date.parse(dataStr));
    }
    ,
    /**
   * showdoc
  * @catalog API/工具/Date
   * @title 获得季度的第一天
   * @description 获得季度的第一天
   * @url getQuarterStartDay(dataStr)
   * @method $instance.getQuarterStartDay(dataStr)
   * @param dataStr 必选 Date 日期时间
   * @return Date
   * @number 60  
   */
    getQuarterStart: function () {
        var now = new Date();
        var QuarterStartDate = '';
        if (now.getMonth() < 3) {
            QuarterStartDate = new Date(now.getFullYear(), 0, 1);
            return this.format(QuarterStartDate, "yyyy-MM-dd");
        } else if (now.getMonth() > 2 && now.getMonth() < 6) {
            QuarterStartDate = new Date(now.getFullYear(), 3, 1);
            return this.format(QuarterStartDate, "yyyy-MM-dd");
        } else if (now.getMonth() > 5 && now.getMonth() < 9) {
            QuarterStartDate = new Date(now.getFullYear(), 6, 1);
            return this.format(QuarterStartDate, "yyyy-MM-dd");
        } else if (now.getMonth() > 8) {
            QuarterStartDate = new Date(now.getFullYear(), 9, 1);
            return this.format(QuarterStartDate, "yyyy-MM-dd");

        }
    },
    /**
   * showdoc
  * @catalog API/工具/Date
   * @title 获得本季度的结束日期
   * @description 获得本季度的结束日期
   * @url getQuarterEndDate()
   * @method $instance.getQuarterEndDate()
   * @return Date
   * @number 60  
   */
    getQuarterEndDate: function () {
        var now = new Date();
        var QuarterStartDate = '';
        if (now.getMonth() < 3) {
            QuarterStartDate = new Date(now.getFullYear(), 2, 31);
            return this.format(QuarterStartDate, "yyyy-MM-dd");
        } else if (now.getMonth() > 2 && now.getMonth() < 6) {
            QuarterStartDate = new Date(now.getFullYear(), 5, 30);
            return this.format(QuarterStartDate, "yyyy-MM-dd");
        } else if (now.getMonth() > 5 && now.getMonth() < 9) {
            QuarterStartDate = new Date(now.getFullYear(), 8, 30);
            return this.format(QuarterStartDate, "yyyy-MM-dd");
        } else if (now.getMonth() > 8) {
            QuarterStartDate = new Date(now.getFullYear(), 11, 31);
            return this.format(QuarterStartDate, "yyyy-MM-dd");
        }
    },

    /**
   * showdoc
  * @catalog API/工具/Date
   * @title 获得本年度的开始日期
   * @description 获得本年度的开始日期
   * @url getYearStartDate()
   * @method $instance.getYearStartDate()
   * @return Date
   * @number 60  
   */
    getYearStartDate: function () {
        var now = new Date();
        var yearFirstDay = new Date(now.getFullYear(), 0, 1);
        return this.format(yearFirstDay, "yyyy-MM-dd");
        //return yearFirstDay.format("yyyy-MM-dd");
    },

    /**
   * showdoc
  * @catalog API/工具/Date
   * @title 获得本年度的结束日期
   * @description 获得本年度的结束日期
   * @url getYearEndDate()
   * @method $instance.getYearEndDate()
   * @return Date
   * @number 60  
   */
    getYearEndDate: function () {
        var now = new Date();
        var yearLastDay = new Date(now.getFullYear(), 11, 31);
        return this.format(yearLastDay, "yyyy-MM-dd");
        //return yearLastDay.format("yyyy-MM-dd");
    },
    /**
   * showdoc
  * @catalog API/工具/Date
   * @title 获得某月的天数
   * @description 获得某月的天数
   * @url getMonthDays(myMonth,myYear)
   * @method $instance.getMonthDays(myMonth,myYear)
   *  @param myMonth,myYear 必选 int 月份
   *  @param myMonth,myYear 必选 int 年份
   * @return Int
   * @number 60  
   */
    getMonthDays: function (myMonth, myYear) {
        if (myYear == undefined) {
            var now = new Date();
            myYear = now.getFullYear();
        }
        myMonth--;
        var d = new Date(myYear, myMonth, 1);
        d.setDate(d.getDate() + 32 - d.getDate());
        return (32 - d.getDate())
    },

    /**
       * showdoc
      * @catalog API/工具/Date
       * @title 获得本周的开始日期
       * @description 获得本周的开始日期
       * @url getWeekStartDate()
       * @method $instance.getWeekStartDate()
       * @return Date
       * @number 60  
       */
    getWeekStartDate: function () {
        var now = new Date();
        var weekStartDate = new Date(now.getFullYear(), now.getMonth(), now
            .getDate()
            - now.getDay());
        return this.format(weekStartDate, "yyyy-MM-dd");
    },

    /**
       * showdoc
      * @catalog API/工具/Date
       * @title 获得本周的结束日期
       * @description 获得本周的结束日期
       * @url getWeekEndDate()
       * @method $instance.getWeekEndDate()
       * @return Date
       * @number 60  
       */
    getWeekEndDate: function () {
        var now = new Date();
        var weekEndDate = new Date(now.getFullYear(), now.getMonth(), now
            .getDate()
            + (6 - now.getDay()));
        return this.format(weekEndDate, "yyyy-MM-dd");
        //return weekEndDate.format("yyyy-MM-dd");
    },

    /**
       * showdoc
      * @catalog API/工具/Date
       * @title 获得本月的开始日期
       * @description 获得本月的开始日期
       * @url getMonthStartDate()
       * @method $instance.getMonthStartDate()
       * @param dateVal 必选 Date|String 日期
       * @return Date
       * @number 60  
       */
    getMonthStartDate: function (dateVal) {
        var now = new Date();
        if (dateVal && typeof dateVal == "string")
            now = DateUtil.strToDate(dateVal);
        var monthStartDate = new Date(now.getFullYear(), now.getMonth(), 1);
        return this.format(monthStartDate, "yyyy-MM-dd");
        //monthStartDate.format("yyyy-MM-dd");
    },
    /**
       * showdoc
      * @catalog API/工具/Date
       * @title 获得本月的结束日期
       * @description 获得本月的结束日期
       * @url getMonthEndDate()
       * @method $instance.getMonthEndDate()
       * @return Date
       * @number 60  
       */
    getMonthEndDate: function (dateVal) {
        var now = new Date();

        if (dateVal && typeof dateVal == "string")
            now = DateUtil.strToDate(dateVal);

        let year = now.getFullYear();
        let month = now.getMonth();
        var tempDate = new Date(new Date(year, month + 1, 1).getTime() - 1000
            * 60 * 60 * 24)
        return this.format(tempDate, "yyyy-MM-dd");
        //return tempDate.format("yyyy-MM-dd");
    },
    /**
       * showdoc
      * @catalog API/工具/Date
       * @title 获当前时间
       * @description 获当前时间
       * @url now()
       * @method $instance.now(format)
       * @param format 可选 String 格式化
       * @return Date
       * @number 60  
       */
    now: function (format) {
        format = format || "yyyy-MM-dd hh:mm:ss";
        return this.format(new Date(), format);
    },
    /**
       * showdoc
      * @catalog API/工具/Date
       * @title 获时间方案
       * @description 获时间方案
       * @url TimeScheme(name)
       * @method $instance.TimeScheme(name)
       * @param name 必选 String 方案名称
       * @return Date
       * @number 60  
       */
    TimeScheme: function (name) {
        var startTime = " 00:00:00到", endTime = " 23:59:59";
        switch (name) {
            case "today":
                return this.format(this.strToDate(this.now()), "yyyy-MM-dd")
                    + startTime
                    + this.format(this.strToDate(this.now()),
                        "yyyy-MM-dd") + endTime;

            case "yesterday":
                return this
                    .format(this.dateAdd("d", -1, this.now()),
                        "yyyy-MM-dd")
                    + startTime
                    + this.format(this.dateAdd("d", -1, this
                        .now()), "yyyy-MM-dd")
                    + endTime;

            case "week":
                return this.getWeekStartDate() + startTime
                    + this.getWeekEndDate() + endTime;

            case "month":
                return this.getMonthStartDate() + startTime
                    + this.getMonthEndDate() + endTime;

            case "quarter":
                return this.getQuarterStartDate() + startTime
                    + this.getQuarterEndDate() + endTime;

            case "year":
                return this.getYearStartDate() + startTime
                    + this.getYearEndDate() + endTime;

            case "days7":
                return this.format(this.dateAdd("d", -7, this.now())
                    , "yyyy-MM-dd")
                    + startTime
                    + this.format(this.strToDate(this.now()),
                        "yyyy-MM-dd") + endTime;

            case "days28":
                return this.format(this.dateAdd("d", -28, this.now())
                    , "yyyy-MM-dd")
                    + startTime
                    + this.format(this.strToDate(this.now()),
                        "yyyy-MM-dd") + endTime;

            case "days84":
                return this.dateAdd("d", -84, this.now())
                    .format("yyyy-MM-dd")
                    + startTime
                    + this.format(this.strToDate(this.now()),
                        "yyyy-MM-dd") + endTime;

            case "halfyear":
                return this.dateAdd("m", -6, this.now())
                    .format("yyyy-MM-dd")
                    + startTime
                    + this.format(this.strToDate(this.now()),
                        "yyyy-MM-dd") + endTime;

            case "oneyear":
                return this.format(this.dateAdd("y", -1, this.now())
                    , "yyyy-MM-dd")
                    + startTime
                    + this.format(this.strToDate(this.now()),
                        "yyyy-MM-dd") + endTime;

        }
    },
    /**
       * showdoc
      * @catalog API/工具/Date
       * @title 在日期中添加或者减去指定的时间间隔天数
       * @description 在日期中添加或者减去指定的时间间隔天数
       * @url dateAdd(datepart, number, dtDate)
       * @method $instance.dateAdd(datepart, number, dtDate)
       * @param datepart 必选 String 间隔类型
       * @param number 必选 Int 间隔数
       * @param dtDate 必选 Date 
       * @return Date
       * @number 60  
       */
    dateAdd: function (datepart, number, dtDate) {
        if (typeof dtDate == "string")
            dtDate = DateUtil.strToDate(dtDate);
        var date = new Date(dtDate);
        datepart = (datepart || 'd').toLowerCase();
        let diff = parseInt(number);
        let tempdate;
        switch (datepart) {
            case "y": // 年
                tempdate = date.setYear(date.getFullYear() + diff)
                break;
            case "q": // 季度
                tempdate = date.setMonth(date.getMonth() + (diff * 3))
                break;
            case "m": // 月
                var sYear = date.getFullYear();
                var sMonth = date.getMonth() + 1;
                var sDay = date.getDate();

                var eYear = sYear;
                var eMonth = sMonth + diff;
                var eDay = sDay;
                while (eMonth > 12) {
                    eYear++;
                    eMonth -= 12;
                }

                var eDate = new Date(eYear, eMonth - 1, eDay);

                while (eDate.getMonth() != eMonth - 1) {
                    eDay--;
                    eDate = new Date(eYear, eMonth - 1, eDay);
                }
                tempdate = eDate;
                break;
            case "d": // 天
                tempdate = date.setDate(date.getDate() + diff);
                break;
            case "h": // 时
                tempdate = date.setHours(date.getHours() + diff);
                break;
            case "mi": // 分
                tempdate = date.setMinutes(date.getMinutes() + diff);
                break;
            case "s": // 秒
                tempdate = date.setSeconds(date.getSeconds() + diff)
                break;
            default:
                tempdate = date.setDate(date.getDate() + diff);
                break;
        }
        return new Date(tempdate);
    }
}