/*若小于10，前面加0*/
function isZero(m) {
    return m < 10 ? '0' + m : m
}

function friendlyDate(timestamp) {
    let formats = {
        'year': '%n% 年前',
        'month': '%n% 月前',
        'day': '%n% 天前',
        'hour': '%n% 小时前',
        'minute': '%n% 分钟前',
        'second': '%n% 秒前',
    };

    let now = Date.now();
    let seconds = Math.floor((now - timestamp) / 1000);
    let minutes = Math.floor(seconds / 60);
    let hours = Math.floor(minutes / 60);
    let days = Math.floor(hours / 24);
    let months = Math.floor(days / 30);
    let years = Math.floor(months / 12);

    let diffType = '';
    let diffValue = 0;
    if (years > 0) {
        diffType = 'year';
        diffValue = years;
    } else {
        if (months > 0) {
            diffType = 'month';
            diffValue = months;
        } else {
            if (days > 0) {
                diffType = 'day';
                diffValue = days;
            } else {
                if (hours > 0) {
                    diffType = 'hour';
                    diffValue = hours;
                } else {
                    if (minutes > 0) {
                        diffType = 'minute';
                        diffValue = minutes;
                    } else {
                        diffType = 'second';
                        diffValue = seconds === 0 ? (seconds = 1) : seconds;
                    }
                }
            }
        }
    }
    return formats[diffType].replace('%n%', diffValue);
}
/*
 * 时间格式转换
 * @param timestamp 时间 String || Date (123456 && 1978-10-25 10:25:20 && data对象)
 * @param format 输出格式 String (slash: 1978/10/25 10:25:20  horizontal: 1978-10-25 10:25:20 minute:10:25 second:10:25)
 */
function formatDate(timestamp, format = 'slash') {
    //时间戳是整数，否则要parseInt转换
    let time = '';
    console.log(timestamp.constructor);
    if (timestamp.constructor === Date) {
        time = timestamp;
    } else {
        time = (parseFloat(timestamp) + 946684800).toString();
        if (time.indexOf('-') != -1 || time.indexOf('/') != -1 || time.indexOf(':') != -1) {
            //将时间字符串转成时间戳
            time = time.replace(/-/g, '/') //为了兼容IOS，需先将字符串转换为'2018/9/11 9:11:23'
            time = new Date(time);
        } else {
            if (time.length == 10) {
                time = new Date(parseInt(time) * 1000);
            } else if (time.length == 13) {
                time = new Date(parseInt(time));
            }
        }
    }
    let y = time.getFullYear();
    let m = time.getMonth() + 1;
    let d = time.getDate();
    let h = time.getHours();
    let mm = time.getMinutes();
    let s = time.getSeconds();
    let now = new Date();
    let seconds = Math.floor((now - time));
    let minutes = Math.floor(seconds / 60);
    let hours = Math.floor(minutes / 60);
    let days = Math.floor(hours / 24);
    let months = Math.floor(days / 30);
    let years = Math.floor(months / 12);
    let NowY = (new Date()).getFullYear();
    let dayTime = 24 * 60 * 60;
    //当前时间
    let td = new Date();
    td = new Date(td.getFullYear(), td.getMonth(), td.getDate());
    //传递时间
    let od = new Date(time);
    od = new Date(od.getFullYear(), od.getMonth(), od.getDate());
    //当前时间与传递时间的差值
    let xc = (od - td) / 1000 / 60 / 60 / 24;
    //return y+'/'+isZero(m)+'/'+isZero(d)+' '+isZero(h)+':'+isZero(mm)+':'+isZero(s);
    switch (format) {
        case "horizontal":
            return y + '-' + isZero(m) + '-' + isZero(d) + ' ' + isZero(h) + ':' + isZero(mm) + ':' + isZero(s);
            break;
        case "day":
            return y + '-' + isZero(m) + '-' + isZero(d);
            break;
        case "minute":
            let result = '';
            if (NowY === y) {
                if (xc < -1) {
                    result = isZero(m) + '-' + isZero(d) + ' ' + isZero(h) + ':' + isZero(mm)
                } else if (xc < 0) {
                    result = '昨天' + ' ' + isZero(h) + ':' + isZero(mm)
                } else if (xc == 0) {
                    result = isZero(h) + ':' + isZero(mm)
                };
            } else {
                result = y + '-' + isZero(m) + '-' + isZero(d) + ' ' + isZero(h) + ':' + isZero(mm)
            }
            return result;
            break;
        case "second":
            let result2 = '';
            if (NowY === y) {
                if (xc < -1) {
                    result2 = isZero(m) + '-' + isZero(d) + ' ' + isZero(h) + ':' + isZero(mm) + ':' + isZero(s)
                } else if (xc < 0) {
                    result2 = '昨天' + ' ' + isZero(h) + ':' + isZero(mm) + ':' + isZero(s)
                } else if (xc == 0) {
                    result2 = isZero(h) + ':' + isZero(mm) + ':' + isZero(s)
                };
            } else {
                result2 = y + '-' + isZero(m) + '-' + isZero(d) + ' ' + isZero(h) + ':' + isZero(mm) + ':' + isZero(s)
            }
            return result2;
            break;
        case "spot":
            let result3 = '';
            result3 = y + '.' + isZero(m) + '.' + isZero(d) + ' ' + isZero(h) + ':' + isZero(mm) + ':' + isZero(s)
            return result3;
            break;
        case "date":
            let result4 = '';
            result4 = y + '.' + isZero(m) + '.' + isZero(d);
            return result4;
            break;
        case "time":
            let result5 = '';
            result5 = isZero(h) + ':' + isZero(mm);
            return result5;
            break;
        case "dateTime":
            let result6 = '';
            result6 = y + '-' + isZero(m) + '-' + isZero(d) + ' ' + isZero(h) + ':' + isZero(mm);
            return result6;
            break;
        case "bvcTime":
            return isZero(h) + ':' + isZero(mm) + ':' + isZero(s) + ' ' + isZero(d) + '/' + isZero(m) + '/' + y;
            break;
        default:
            return y + '/' + isZero(m) + '/' + isZero(d) + ' ' + isZero(h) + ':' + isZero(mm) + ':' + isZero(s);

    }

}
export {
    friendlyDate,
    formatDate
}