js中最常用的日期总结

 

日期格式化

 

/**  日期格式化
 * formatTime('星期W')                  // 星期日
formatTime("YYYY-MM-DD hh:mm:ss")   // 2021-03-21 20:24:32
formatTime("MM/DD/YYYY hh:mm")      // 03-21-2021 20:24
formatTime("MM/DD/YYYY hh:mm")      // 03-21-2021 20:24 
formatTime("YYYY年MM月DD日 hh:mm:ss 星期W") // 2021年03月21日 20:30:14 星期日
 * @returns 
 */
export function formatTime(fmt) {
    const date = new Date()
    const o = {
        "Y+": date.getFullYear(),
        "M+": date.getMonth() + 1, //
        "D+": date.getDate(), //
        "h+": date.getHours(), //
        "m+": date.getMinutes(), //
        "s+": date.getSeconds(), //
        "W": date.getDay() //
    }
    for (let k in o) {
        if (new RegExp("(" + k + ")").test(fmt)) {
            fmt = fmt.replace(RegExp.$1, () => {
                if (k === 'W') { // 星期几
                    const week = ['日', '一', '二', '三', '四', '五', '六']
                    return week[o[k]]
                } else if (k === 'Y+' || RegExp.$1.length == 1) { // 年份 or 小于10不加0
                    return o[k]
                } else {
                    return ("00" + o[k]).substr(("" + o[k]).length) // 小于10补位0
                }
            })
        }
    }
    return fmt
}
 
时间渲染
 
/**
 * 时间渲染
 * @param {string} text
 */
export function renderTime(time) {
    if (time) {
        if (typeof time === 'string') {
            return time.split(' ')[0];
        } else if (typeof time === 'number') {
            return dateFormat(time, 'yyyy-MM-dd')
        }
    }
    return renderText(null);
}
 
去年的当前时间
 
export function lastYear() {
    let date = new Date();
    let seperator1 = "-";
    let seperator2 = ":";
    let month = date.getMonth() + 1;
    let strDate = date.getDate();
    if (month >= 1 && month <= 9) {
        month = "0" + month;
    }
    if (strDate >= 0 && strDate <= 9) {
        strDate = "0" + strDate;
    }
    let currentdate = date.getFullYear() - 1 + seperator1 + month + seperator1 + strDate +
        " " + date.getHours() + seperator2 + date.getMinutes() +
        seperator2 + date.getSeconds();
    return currentdate;
}

 

获得给定毫秒数的可读格式
/*
  获得给定毫秒数的可读格式
  // 事例
  formatDuration(1001); // '1 second, 1 millisecond'
  formatDuration(34325055574);  // '397 days, 6 hours, 44 minutes, 15 seconds, 574 milliseconds'
*/
export function formatDuration(ms) {
    if (ms < 0) ms = -ms;
    const time = {
        day: Math.floor(ms / 86400000),
        hour: Math.floor(ms / 3600000) % 24,
        minute: Math.floor(ms / 60000) % 60,
        second: Math.floor(ms / 1000) % 60,
        millisecond: Math.floor(ms) % 1000
    };
    return Object.entries(time)
        .filter(val => val[1] !== 0)
        .map(([key, val]) => `${val} ${key}${val !== 1 ? 's' : ''}`)
        .join(', ');
};

 

两个日期之间的差异---相差的天数

 

/*
  两个日期之间的差异---相差的天数
// 事例
getDaysDiffBetweenDates(new Date('2017-12-13'), new Date('2017-12-22')); // 9
*/
export const getDaysDiffBetweenDates = (dateInitial, dateFinal) =>
    (dateFinal - dateInitial) / (1000 * 3600 * 24);

 

时间格式2020-02-11T12:24:18.000+0000转化成正常格式
 
/*
        2016-09-19T11:14:00+08:00
*时间格式2020-02-11T12:24:18.000+0000转化成正常格式
renderTimeTwo('2020-12-17T11:11:42.861') //"2020-12-17 11:11:42"
*/ 
export function renderTimeTwo(date) {
    let dateee = new Date(date).toJSON();
    return new Date(+new Date(dateee) + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
}

 

时间转为几天前、几小时前、几分钟前
 
export function getDateDiff(dateTimeStamp) {
    // 时间字符串转时间戳
    let timestamp = new Date(dateTimeStamp).getTime();

    let minute = 1000 * 60;
    let hour = minute * 60;
    let day = hour * 24;
    let halfamonth = day * 15;
    let month = day * 30;
    let year = day * 365;
    let now = new Date().getTime();
    let diffValue = now - timestamp;
    let result;
    if (diffValue < 0) {
        return;
    }
    let yearC = diffValue / year;
    let monthC = diffValue / month;
    let weekC = diffValue / (7 * day);
    let dayC = diffValue / day;
    let hourC = diffValue / hour;
    let minC = diffValue / minute;
    if (yearC >= 1) {
        result = "" + parseInt(yearC) + "年前";
    } else if (monthC >= 1) {
        result = "" + parseInt(monthC) + "月前";
    } else if (weekC >= 1) {
        result = "" + parseInt(weekC) + "周前";
    } else if (dayC >= 1) {
        result = "" + parseInt(dayC) + "天前";
    } else if (hourC >= 1) {
        result = "" + parseInt(hourC) + "小时前";
    } else if (minC >= 1) {
        result = "" + parseInt(minC) + "分钟前";
    } else
        result = "刚刚";
    return result;
}

 

判断时间是否在区间之内
 
/***
 * 判断时间是否在区间之内
 * console.log(times('08:30', '15:54'))
 */
export function timeInterval(beginTime, endTime){
    const bDate = beginTime.split(':')
    const eDate = endTime.split(':')
    
    const o = {}
    const s = ['nDate', 'bDate', 'eDate']

    for (let i of s) {
        o[i] = new Date()
        let hours, minute;
        if (i == 'nDate') {
            hours = o[i].getHours()
            minute = o[i].getMinutes()
        } else {
            const arr = i == 'bDate' ? bDate : eDate
            hours = arr[0]
            minute = arr[1] || 0
        }
        o[i].setHours(hours)
        o[i].setMinutes(minute)
    }
    // 当前、开始、结束,三者的时间戳进行对比,答案就很清晰明了
    return o.nDate.getTime() - o.bDate.getTime() > 0 && o.nDate.getTime() - o.eDate.getTime() < 0
}

 

后七天日期
 
export function getAfterDate(){
    let date = new Date().getTime(), 
        result = [], 
        newDate, 
        year,
        month, 
        day;
    for (let i = 1; i < 8; i++) {
        newDate = date + i * 24 * 60 * 60 * 1000;
        year = new Date(newDate).getFullYear();
        month = (new Date(newDate).getMonth() + 1)>9?(new Date(newDate).getMonth() + 1):'0'+(new Date(newDate).getMonth() + 1);
        day = new Date(newDate).getDate();
        result.push(year+'-'+month + '-' + day);
    }
    return result
}

 

前七天日期
 
export function getBeforeDate(designatedTime) {
    designatedTime=designatedTime||new Date()
    let date = new Date(designatedTime).getTime(),
        result = [],
        newDate,
        year,
        month,
        day;
    for (let i = 7; i > 0; i--) {
        newDate = date - i * 24 * 60 * 60 * 1000;
        year = new Date(newDate).getFullYear();
        month = (new Date(newDate).getMonth() + 1) > 9 ? (new Date(newDate).getMonth() + 1) : '0' + (new Date(newDate).getMonth() + 1)
        day = new Date(newDate).getDate();
        day = day > 9 ? day : '0' + day;
        result.push(year+'-'+month + '-' + day);
    }
    return result
}

 

是否七天内日期(当前时间后7天范围内,包含当天时间)
 
/*
是否七天内日期(当前时间后7天范围内,包含当天时间)

currentTime----当前时间
timestamp----是否时间之内

console.log(isTime('2021-04-16')) // true
console.log(isTime('2021-04-15')) // true
console.log(isTime('2021-04-22')) // false

isTime('2021-04-26','2021-04-22')  //true---26号在22号7天范围内
*/ 

export function isTime(timestamp,currentTime) {
    currentTime=currentTime||new Date();
    timestamp = new Date(timestamp).getTime();
    const endTime = 24 * 60 * 60 * 1000 * 7;
    currentTime = new Date(currentTime).setHours(0, 0, 0, 0);
    return currentTime <= timestamp && currentTime + endTime > timestamp
}

 

倒计时
 
/*
倒计时

setInterval(GetRTime('2021-07-20 00:00:00'),0);
console.log(GetRTime('2021-07-20 00:00:00'))
*/

export function GetRTime(time) {
    // time = '2016-07-20 00:00:00';
    time = time.replace("-", "/");
    let EndTime = new Date(time);
    let NowTime = new Date();
    // let t = EndTime.getTime() - NowTime.getTime();
    let EndTime1 = EndTime.getTime();
    let NowTime1 = NowTime.getTime();
    let t = parseFloat(EndTime1) - parseFloat(NowTime1);
    let d = 0;
    let h = 0;
    let m = 0;
    let s = 0;
    if (t >= 0) {
        d = Math.floor(t / 1000 / 60 / 60 / 24);
        h = Math.floor(t / 1000 / 60 / 60 % 24);
        m = Math.floor(t / 1000 / 60 % 60);
        s = Math.floor(t / 1000 % 60);
        return {
            day: d,
            hour: h,
            minute: m,
            second: s
        }
    } else {
        return false
    }
}

 

posted @ 2021-06-02 11:37  淡紫色鍀薰衣草  阅读(545)  评论(0)    收藏  举报