/**
 * Created by weicong on 2017/12/27.
 */

/**
 * 时间格式转换
 * 用法：DateFormat(date)  DateFormat(fmt)  DateFormat()  DateFormat(date,fmt)
 * @param  date 时间
 * @param fmt 时间格式
 * @returns 指定格式的时间字符串
 */
export default DateFormat = function (date, fmt) {
    if (arguments.length == 1) {
        if ((typeof date == 'string') && date.constructor == String)
            fmt = date;
    }
    date = (typeof date == 'object') && date.constructor == Date ? date : new Date();
    fmt = fmt || 'yyyy-MM-dd';
    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 (/(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;
}

/**
 * 比较起始时间不超过一周
 * @param fir 开始时间
 * @param sec 结束时间
 * @returns {boolean}
 */
export function isSameWeek(beg, end) {
    let rs = getInterval(beg, end);
    if (rs == undefined || rs == null)
        return false;
    return rs <= 7;
}

/**
 * 计算结束时间和开始时间之间的间隔，
 * @param beg 开始时间
 * @param end 结束时间
 * @returns {null}
 */
export function getInterval(beg, end) {
    var begd = (typeof beg == 'object') && beg.constructor == Date ? beg : new Date(beg);
    var endd = (typeof end == 'object') && end.constructor == Date ? end : new Date(end);
    var oneDayTime = 1000 * 60 * 60 * 24;
    var begtime = begd.getTime();
    var endtime = endd.getTime();
    if (begtime > endtime) {
        return null;
    }
    return parseInt((endtime - begtime) / oneDayTime + 1);
}

/**
 * 加减天数函数
 * @param date 当前时间
 * @param days 传入正数表示增加多少天；传入负数表示在当前时间减去多少天
 * @param fmt 时间格式
 * @returns {string} 返回计算后的指定时间格式字符串
 */
export function addDate(date, days, fmt) {
    var d = (typeof date == 'object') && date.constructor == Date ? date : new Date(date);
    fmt = fmt || 'yyyy-MM-dd';
    d.setDate(d.getDate() + days);
    var nd = DateFormat(d, fmt);
    return nd;
}