前端常用时间工具函数封装

1 判断闰年函数

闰年需要满足以下两个条件,1、能被4整除,但不能被100整除;2、能被400整除

/**
 * 判断润年
 * @param {string} year 年份
 * @return {Boolean}
 */
const isLeap = function(year) {
    if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {
        return true;
    }
    return false;
};

2 获取日期的星期

使用Date自带的getDay方法可以获得指定日期的星期,返回的数值为0到6,分别代表星期天到星期六

/**
 * 获取星期
 * @param {string} date 日期
 * @return {string} 星期
 */
const getWeek = function(date) {
    let Stamp = new Date(date);
    let weeks = ["日", "一", "二", "三", "四", "五", "六"];
    return weeks[Stamp.getDay()];
};

3 获取月份天数

只需要区分大小月,然后再特殊处理一下二月份闰年的情况即可

/**
 * 获取月份天数
 * @param {string} year  年份
 * @param {string} month 月份
 * @return {number} 月份天数
 */
const getMonthDays = function(year, month) {
    month = parseInt(month) - 1;
    if (month < 0 || month > 11) return "";
    let months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    if (isLeap(year)) {
        months[1] = 29;
    }
    return months[month];
};

4 数字补零

在遇到一位数的月份和天数时,我们往往需要对其补零,保持两位数

/**
 * 数字补零
 * @param {string} str
 * @return {string}
 */
const zero = function(str) {
    str = parseInt(str);
    return str > 9 ? str : "0" + str;
};

5 格式化获取今天日期

入参为格式字符串,主要有"yyyy-mm-dd"、"mm-dd-yyyy"、"yyyy-mm-dd hh:MM:ss"、"hh:MM:ss"、"yyyy"、"mm"、"dd"、"hh"等等…………,其中y代表年份,m代表月份,d代表天数,h为小时,M是分钟,S为秒数

/**
 * 获取今天日期
 * @param {string} str  日期格式
 * @return {string} 格式化日期
 */
const getToday = function(str = "yyyy-mm-dd") {
    const date = new Date();
    const year = date.getFullYear(),
        month = zero(date.getMonth() + 1),
        day = zero(date.getDate()),
        hour = zero(date.getHours()),
        minute = zero(date.getMinutes()),
        second = zero(date.getSeconds());
    let res = "";
    switch (str) {
        case "yyyy-mm-dd":
            res = year + "-" + month + "-" + day;
            break;
        case "mm-dd-yyyy":
            res = month + "-" + day + "-" + year;
            break;
        case "yyyy-mm-dd hh:MM:ss":
            res =
                year +
                "-" +
                month +
                "-" +
                day +
                " " +
                hour +
                ":" +
                minute +
                ":" +
                second;
            break;
        case "hh:MM:ss":
            res = hour + ":" + minute + ":" + second;
            break;
        case "yyyy":
            res = year;
            break;
        case "mm":
            res = month;
            break;
        case "dd":
            res = day;
            break;
        case "hh":
            res = hour;
            break;
        case "MM":
            res = minute;
            break;
        case "ss":
            res = second;
            break;
        case "mm-dd":
            res = month + "-" + day;
            break;
        default:
            res = "参数错误";
            break;
    }
    return res;
};

6 将时间按照所传入的时间格式进行转换

/**
 * 将时间按照所传入的时间格式进行转换
 * @param {string} value  日期
 * @param {string} formatStr  日期格式
 * @return {string} 格式化日期
 */
const dateFormat = function(value, formatStr = "yyyy-mm-dd") {
    const date = new Date(value);
    const year = date.getFullYear(),
        month = zero(date.getMonth() + 1),
        day = zero(date.getDate()),
        hour = zero(date.getHours()),
        minute = zero(date.getMinutes()),
        second = zero(date.getSeconds());
    let res = "";
    switch (formatStr) {
        case "yyyy-mm-dd":
            res = year + "-" + month + "-" + day;
            break;
        case "mm-dd-yyyy":
            res = month + "-" + day + "-" + year;
            break;
        case "yyyy-mm-dd hh:MM:ss":
            res =
                year +
                "-" +
                month +
                "-" +
                day +
                " " +
                hour +
                ":" +
                minute +
                ":" +
                second;
            break;
        case "hh:MM:ss":
            res = hour + ":" + minute + ":" + second;
            break;
        case "yyyy":
            res = year;
            break;
        case "mm":
            res = month;
            break;
        case "dd":
            res = day;
            break;
        case "hh":
            res = hour;
            break;
        case "MM":
            res = minute;
            break;
        case "ss":
            res = second;
            break;
        case "mm-dd":
            res = month + "-" + day;
            break;
        default:
            res = "参数错误";
            break;
    }
    return res;
};

7 获取指定日期的上一天日期

可以获取指定日期的上一天日期,如2021-01-01的上一天为2020-12-31

/**
 * 获取上一天日期
 * @param {string} str  当前日期
 * @return {string} 上一天日期
 */
const getYesterday = function(str) {
    let date = str.split("-");
    let year = parseInt(date[0]),
        month = parseInt(date[1]),
        day = parseInt(date[2]);
    if (month > 12 || month < 1 || day > getMonthDays(year, month))
        return "日期不合法";
    day -= 1;
    if (day > 0) {
        return year + "-" + zero(month) + "-" + zero(day);
    }
    month -= 1;
    if (month > 0) {
        return year + "-" + zero(month) + "-" + getMonthDays(year, month);
    }
    year -= 1;
    return year + "-" + 12 + "-" + getMonthDays(year, 12);
};

8 获取指定日期的下一天日期

可以获取指定日期的上一天日期,如2020-12-31的下一天为2021-01-01

/**
 * 获取下一天日期
 * @param {string} str  当前日期
 * @return {string} 下一天日期
 */
const getTomorrow = function(str) {
    let date = str.split("-");
    let year = parseInt(date[0]),
        month = parseInt(date[1]),
        day = parseInt(date[2]);
    if (month > 12 || month < 1 || day > getMonthDays(year, month))
        return "日期不合法";
    day += 1;
    if (day <= getMonthDays(year, month)) {
        return year + "-" + zero(month) + "-" + zero(day);
    }
    month += 1;
    if (month < 13) {
        return year + "-" + zero(month) + "-" + "01";
    }
    year += 1;
    return year + "-" + "01" + "-" + "01";
};

9 获取指定日期的前n天日期

为获取上一天日期的扩展,这里简单的循环获取上一天来获取前n天日期

/**
 * 获取前n天日期
 * @param {string} n  当前日期
 * @return {string} 前n天日期
 */
const beforeDay = function(date, n) {
    if (date.split("-").length < 3) return "日期格式错误";
    let res = dateFormat(date);
    n = parseInt(n);
    while (n--) {
        res = getYesterday(res);
    }
    return res;
};

10 获取指定日期的后n天日期

为获取下一天日期的扩展,这里简单的循环获取下吧一天来获取后n天日期

/**
 * 获取后n天日期
 * @param {string} n  当前日期
 * @return {string} 后n天日期
 */
const afterDay = function(date, n) {
    if (date.split("-").length < 3) return "日期格式错误";
    let res = dateFormat(date);
    while (n--) {
        res = getTomorrow(res);
    }
    return res;
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值