获取当前时间往前的日期

589 阅读2分钟

前几天做OEM的需求,需要获取当前时间往前 10 个小时、 10 天、10 周、 10月。方法如下:

// 格式化时间
/*
* date: 日期对象
* type: 格式化类型。参数有4种 'hour': 2018-03-07 19:00;  'day': 2018-03-07;  'week': 03-05 至 03-11;  'month': 2018-03
*/
function formattingDate(date, type) {
    let year = date.getFullYear(),
        month = (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : (date.getMonth() + 1),
        day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate(),
        hour = date.getHours() < 10 ? '0' + date.getHours() : date.getHours();
    
    if (!type || type === 'day') { // 默认显示年、月、日
        return year + "-" + month + "-" + day;
    } else if (type === 'hour') {
        return year + "-" + month + "-" + day + " " + hour + ":00";
    } else if (typ === 'week') {
        return month + "-" + day;
    } else if (type === 'month') {
        return year + "-" + month;
    }
}

1、获取当前时间往前 10 个小时

    function getTenHour () {
        let nowDateTime = new Date().getTime(),
            noeHourTime = 60 * 60 * 1000,
            hourArr = [];
        for (var i = 0; i < 10; i++) {
            let itemHourTime = nowDateTime - i * noeHourTime,
                itemHour = formattingDate(new Date(itemHourTime), 'hour');
            hourArr.push(itemHour);
        }
        return hourArr;
    }

2、获取当前时间往前 10 天

    function getTenDay () {
        let nowDateTime = new Date().getTime();
            noeDayTime = 24 * 60 * 60 * 1000,
            dayArr = [];
        for (var i = 0; i < 10; i++) {
            let itemDayTime = nowDateTime - i * noeDayTime,
                itemDay = formattingDate(new Date(itemDayTime), 'day');
            dayArr.push(itemDay);
        }
        return dayArr;
    }

上面还是挺简单的,就是用当前的毫秒数减去单位毫秒,然后初始化一个日期对象就好了。但是获取周、月就麻烦了

3、获取当前时间往前 10 周

    function getTenWeek () {
        let nowDate = new Date(),
            nowDateTime = nowDate.getTime(),
            noeDayTime = 24 * 60 * 60 * 1000,
            nowDay = nowDate.getDay() === 0 ? 7 : nowDate.getDay(), // 获取当前周几。注意:周日的值为 0 ;
            nowMondayTime = nowDateTime - (nowDay - 1) * noeDayTime, // 获取当前所在周的周一
            weekArr = [];  
        for (var i = 0; i < 10; i++) {
            let itemMondayTime = nowMondayTime - i * 7 * noeDayTime, // 每个周一的毫秒数
                itemMonday = formattingDate(new Date(itemMondayTime), 'week'),
                itemWeekdayTime = nowMondayTime + i * 6 * noeDayTime, // 每个周日的毫秒数
                itemWeekDay = formattingDate(new Date(itemWeekdayTime), 'week');
            weekArr.push(itemMonday + ' 至 ' + itemWeekDay);
        }
        return weekArr;
    }

4、获取当前时间往前 10 月

    function getTenMonth () {
        let nowDate = new Date(),
            year = nowDate.getFullYear(),
            month = nowDate.getMonth(),
            nowMonthOneDay = new Date(year, month, 1), // 当前月的第一天
            tempTime = nowMonthOneDay.getTime(),
            oneDayTime = 24 * 60 * 60 * 1000,
            monthArr = [];
        for (var i = 0; i < 10; i++) {
            let nowMonth = formattingDate(new Date(tempTime),'month'), // 当前月
                prevMonthDate = new Date(tempTime - oneDayTime), // 上一个月的最后一天
                prevYear = prevMonthDate.getFullYear(),
                prevMonth = prevMonthDate.getMonth(),
                prevMonthOneDay = new Date(prevYear, prevMonth, 1); // 上一个月的第一天
            tempTime = prevMonthOneDay.getTime();
            monthArr.push()
        }
        return monthArr;
    }