/**
 * 将日期格式转为字符串格式
 * @param date
 * @returns {*}
 */
var dateToString = function (date) {
    if (date == null || date == "") {
        return null;
    }
    var year = date.getFullYear();
    var month = (date.getMonth() + 1).toString();
    var day = (date.getDate()).toString();
    if (month.length == 1) {
        month = "0" + month;
    }
    if (day.length == 1) {
        day = "0" + day;
    }
    var dateTime = year + "-" + month + "-" + day;
    return dateTime;
}


/**
 * 转成有单位的日期字符串
 * @param date
 * @returns {*}
 */
var dateToFullString = function (date) {
    if (date == null || date == "") {
        return null;
    }
    var year = date.getFullYear();
    var month = (date.getMonth() + 1).toString();
    var day = (date.getDate()).toString();
    if (month.length == 1) {
        month = "0" + month;
    }
    if (day.length == 1) {
        day = "0" + day;
    }
    var dateTime = year + "年" + month + "月" + day + "日";
    return dateTime;
}


/**
 * 使用时候直接调用方法 Format(date,"yyyy-MM-dd HH:mm");输出格式为 "2015-10-14 16:50"；第一个参数为时间，第二个参数为输出格式。
 * 格式中代表的意义：
 * d:日期天数；dd:日期天数（2位，不够补0）；ddd:星期（英文简写）；dddd:星期（英文全拼）；
 * M:数字月份；MM:数字月份（2位，不够补0）；MMM:月份（英文简写）；MMMM:月份（英文全拼）；
 * yy:年份（2位）；yyyy:年份；
 * h:小时（12时计时法）；hh:小时（2位，不足补0；12时计时法）；
 * H:小时（24时计时法）；HH:小时（2位，不足补0；24时计时法）；
 * m:分钟；mm:分钟（2位，不足补0）；
 * s:秒；ss:秒（2位，不足补0）；
 * l:毫秒数（保留3位）；
 *　tt: 小时（12时计时法，保留am、pm）；TT: 小时（12时计时法，保留AM、PM）；
 * @param now
 * @param mask
 * @returns {string | void}
 * @constructor
 */
function format(now, mask) {
    var d = new Date(Date.parse(now));
    var zeroize = function (value, length) {
        if (!length) length = 2;
        value = String(value);
        for (var i = 0, zeros = ''; i < (length - value.length); i++) {
            zeros += '0';
        }
        return zeros + value;
    };

    return mask.replace(/"[^"]*"|'[^']*'|\b(?:d{1,4}|m{1,4}|yy(?:yy)?|([hHMstT])\1?|[lLZ])\b/g, function ($0) {
        switch ($0) {
            case 'd':
                return d.getDate();
            case 'dd':
                return zeroize(d.getDate());
            case 'ddd':
                return ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat'][d.getDay()];
            case 'dddd':
                return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][d.getDay()];
            case 'M':
                return d.getMonth() + 1;
            case 'MM':
                return zeroize(d.getMonth() + 1);
            case 'MMM':
                return ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][d.getMonth()];
            case 'MMMM':
                return ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'][d.getMonth()];
            case 'yy':
                return String(d.getFullYear()).substr(2);
            case 'yyyy':
                return d.getFullYear();
            case 'h':
                return d.getHours() % 12 || 12;
            case 'hh':
                return zeroize(d.getHours() % 12 || 12);
            case 'H':
                return d.getHours();
            case 'HH':
                return zeroize(d.getHours());
            case 'm':
                return d.getMinutes();
            case 'mm':
                return zeroize(d.getMinutes());
            case 's':
                return d.getSeconds();
            case 'ss':
                return zeroize(d.getSeconds());
            case 'l':
                return zeroize(d.getMilliseconds(), 3);
            case 'L':
                var m = d.getMilliseconds();
                if (m > 99) m = Math.round(m / 10);
                return zeroize(m);
            case 'tt':
                return d.getHours() < 12 ? 'am' : 'pm';
            case 'TT':
                return d.getHours() < 12 ? 'AM' : 'PM';
            case 'Z':
                return d.toUTCString().match(/[A-Z]+$/);
            // Return quoted strings with the surrounding quotes removed
            default:
                return $0.substr(1, $0.length - 2);
        }
    });
};


/**
 * 转成有单位的日期字符串
 * @param date
 * @returns {*}
 */
var nowString = function () {
    var now = new Date();
    var year = now.getFullYear();
    var month = (now.getMonth() + 1).toString();
    var day = (now.getDate()).toString();
    if (month.length == 1) {
        month = "0" + month;
    }
    if (day.length == 1) {
        day = "0" + day;
    }
    var dateTime =year + "-" + month + "-"+day;
    return dateTime;
}


/**
 * 判断给定日期是否合法
 */
function checkDate(year, month, date) {
    var now = new Date(year, month - 1, date);
    if (now.getDate() == date && now.getFullYear() == year && now.getMonth() == (month - 1)) {
        return true;
    }
    return false;
}

/**
 * 判断本地时间是否在 时间区间内
 * @param time1 开始日期
 * @param time2 结束日期
 * @returns {boolean} 结束日期
 */
function range(time1,time2){
    var time = Date.parse( new Date());
    if (time1<time&&time2>time) {
        return true;
    };
    return false;
}

/**
 * 将 HH:mm 字符串转换成 完整时间
 * @param time 时间字符串
 * @returns {number}
 */
function paseToFullTime(time){
    var date = new Date();
    var year = date.getFullYear(); //获取当前年份
    var mon = date.getMonth() + 1; //获取当前月份
    var da = date.getDate(); //获取当前日
    var returnTime = year + '-' + mon + '-' + da + ' ' +time+":00";
    return Date.parse(returnTime);
}



/**
 * 日期改变事件
 * @param callback 回调函数
 */
function daterangepicker(callback) {
    daterangepickerWithIdAndCallBack('reportrange',callback);
    // if (typeof ($.fn.daterangepicker) === 'undefined') {
    //     return;
    // }
    // console.log('init_daterangepicker');
    //
    // var cb = function (start, end, label) {
    //     console.log(start.toISOString(), end.toISOString(), label);
    //     $('#reportrange span').html(start.format('YYYY-MM-DD') + ' - ' + end.format('YYYY-MM-DD'));
    //     if(callback!=null){
    //         callback();
    //     }
    // };
    // var optionSet1 = {
    //     //startDate: moment().subtract(29, 'days'),
    //     startDate: moment(),
    //     endDate: moment(),
    //     minDate: '2012-01-01',
    //     maxDate: nowString(),
    //     dateLimit: {
    //         days: 1200
    //     },
    //     showDropdowns: true,
    //     showWeekNumbers: true,
    //     timePicker: false,
    //     timePickerIncrement: 1,
    //     timePicker12Hour: true,
    //     ranges: {
    //         '今天': [moment(), moment()],
    //         '昨天': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
    //         '最近7天': [moment().subtract(6, 'days'), moment()],
    //         '最近30天': [moment().subtract(29, 'days'), moment()],
    //         '当月': [moment().startOf('month'), moment().endOf('month')],
    //         '上个月': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
    //     },
    //     opens: 'left',
    //     buttonClasses: ['btn btn-default'],
    //     applyClass: 'btn-small btn-primary',
    //     cancelClass: 'btn-small',
    //     format: 'YYYY-MM-DD',
    //     separator: ' to ',
    //     locale: {
    //         applyLabel: '确定',
    //         cancelLabel: '取消',
    //         fromLabel: 'From',
    //         toLabel: 'To',
    //         customRangeLabel: '自定义',
    //         daysOfWeek: ['日', '一', '二', '三', '四', '五', '六'],
    //         monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
    //         firstDay: 1
    //     }
    // };
    //
    // //$('#reportrange span').html(moment().subtract(29, 'days').format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD'));
    // $('#reportrange span').html(moment().format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD'));
    // if(callback!=null){
    //     callback();
    // }
    // $('#reportrange').daterangepicker(optionSet1, cb);
    // $('#reportrange').on('show.daterangepicker', function () {
    //     console.log("show event fired");
    // });
    // $('#reportrange').on('hide.daterangepicker', function () {
    //     console.log("hide event fired");
    // });
    // $('#reportrange').on('apply.daterangepicker', function (ev, picker) {
    //     console.log("apply event fired, start/end dates are " + picker.startDate.format('YYYY-MM-DD') + " to " + picker.endDate.format('YYYY-MM-DD'));
    // });
    // $('#reportrange').on('cancel.daterangepicker', function (ev, picker) {
    //     console.log("cancel event fired");
    // });
    // $('#options1').click(function () {
    //     $('#reportrange').data('daterangepicker').setOptions(optionSet1, cb);
    // });
    // $('#options2').click(function () {
    //     $('#reportrange').data('daterangepicker').setOptions(optionSet2, cb);
    // });
    // $('#destroy').click(function () {
    //     $('#reportrange').data('daterangepicker').remove();
    // });
}



/**
 * 日期改变事件
 * @param callback 回调函数
 */
function daterangepickerWithIdAndCallBack(id,callback) {

    if (typeof ($.fn.daterangepicker) === 'undefined') {
        return;
    }
    console.log('init_daterangepicker');

    var cb = function (start, end, label) {
        console.log(start.toISOString(), end.toISOString(), label);
        $('#'+id+' span').html(start.format('YYYY-MM-DD') + ' - ' + end.format('YYYY-MM-DD'));
        if(callback!=null){
            callback();
        }
    };
    var optionSet1 = {
        //startDate: moment().subtract(29, 'days'),
        startDate: moment(),
        endDate: moment(),
        minDate: '2012-01-01',
        //maxDate: nowString(),
        dateLimit: {
            days: 1200
        },
        showDropdowns: true,
        showWeekNumbers: true,
        timePicker: false,
        timePickerIncrement: 1,
        timePicker12Hour: true,
        ranges: {
            '今天': [moment(), moment()],
            '昨天': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
            '最近7天': [moment().subtract(6, 'days'), moment()],
            '最近30天': [moment().subtract(29, 'days'), moment()],
            '当月': [moment().startOf('month'), moment().endOf('month')],
            '上个月': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
        },
        opens: 'left',
        buttonClasses: ['btn btn-default'],
        applyClass: 'btn-small btn-primary',
        cancelClass: 'btn-small',
        format: 'YYYY-MM-DD',
        separator: ' to ',
        locale: {
            applyLabel: '确定',
            cancelLabel: '取消',
            fromLabel: 'From',
            toLabel: 'To',
            customRangeLabel: '自定义',
            daysOfWeek: ['日', '一', '二', '三', '四', '五', '六'],
            monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
            firstDay: 1
        }
    };

    //$('#reportrange span').html(moment().subtract(29, 'days').format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD'));
    $('#'+id+' span').html(moment().format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD'));
    if(callback!=null){
        callback();
    }
    $('#'+id).daterangepicker(optionSet1, cb);
    $('#'+id).on('show.daterangepicker', function () {
        console.log("show event fired");
    });
    $('#'+id).on('hide.daterangepicker', function () {
        console.log("hide event fired");
    });
    $('#'+id).on('apply.daterangepicker', function (ev, picker) {
        console.log("apply event fired, start/end dates are " + picker.startDate.format('YYYY-MM-DD') + " to " + picker.endDate.format('YYYY-MM-DD'));
    });
    $('#'+id).on('cancel.daterangepicker', function (ev, picker) {
        console.log("cancel event fired");
    });
    $('#options1').click(function () {
        $('#'+id).data('daterangepicker').setOptions(optionSet1, cb);
    });
    $('#options2').click(function () {
        $('#'+id).data('daterangepicker').setOptions(optionSet2, cb);
    });
    $('#destroy').click(function () {
        $('#'+id).data('daterangepicker').remove();
    });
}

