JS时间戳转换日期

504 阅读2分钟

js时间戳转日期

const date = new Date(); // 获取当前时间戳
// time 是指定某一天的时间戳,要求13位(毫秒级),但是一般后台返回的是 10位数的时间戳
const date = `${time}`.length > 10 ? new Date(time) : new Date(time * 1000); 
const YY = `${date.getFullYear()}`; // 获取年份
// 获取月份,月份的返回值是 0-11,其中0对应1月,所以月份需要在原基础 + 1
const MM = `${date.getMonth() + 1 < 10 ? `0${(date.getMonth() + 1)}` : date.getMonth() + 1}`; 
const DD = `${date.getDate() < 10 ? `0${date.getDate()}` : date.getDate()}`; // 获取当前日
const hh = `${date.getHours() < 10 ? `0${date.getHours()}` : date.getHours()}`; // 获取当前小时数
const mm = `${date.getMinutes() < 10 ? `0${date.getMinutes()}` : date.getMinutes()}`; // 获取当前分钟数
const ss = `${date.getSeconds() < 10 ? `0${date.getSeconds()}` : date.getSeconds()}`; // 获取当前秒数
const week = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六', ][date.getDay()]; // 获取星期几
    

js时间戳转换自定义日期格式(适用常见的日期格式)

/**
 * 函数描述: 格式化日期
 * @param {Date} date 日期对象
 * @param {String} format 输出的日期格式
 * @param {Boolean} isFill 日期是否需要补0
 * @param {Boolean} isShowWeek 是否显示星期
 * @return {String} 格式化后的日期
 */
const dateTransfomr = ({
    date = new Date(),
    format = '%Y-%M-%D %h:%m:%s',
    isFill = true,
    isShowWeek = false,
}) => {
    const Y = date.getFullYear();
    let M = date.getMonth() + 1,
        D = date.getDate(),
        h = date.getHours(),
        m = date.getMinutes(),
        s = date.getSeconds();
    if (isFill) {
        const less = value => value < 10;
        M = less(M) ? `0${M}` : M;
        D = less(D) ? `0${D}` : D;
        h = less(h) ? `0${h}` : h;
        m = less(m) ? `0${m}` : m;
        s = less(s) ? `0${s}` : s;
    }
    const week = isShowWeek ? ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六', ][date.getDay()] : '';
    return `${format.replace('%Y', Y)
    .replace('%M', M)
    .replace('%D', D)
    .replace('%h', h)
    .replace('%m', m)
    .replace('%s', s)} ${week}`;
};

/**
 * 函数描述: 格式化日期
 * @param {Object} options 格式化日期配置
 * @param {Number} options.timeStamp 时间戳
 * @param {String} options.format 输出的日期格式
 * @param {Boolean} options.isFill 日期是否需要补0
 * @param {Boolean} options.isShowWeek 是否显示星期
 * @param {Date} options.date 日期对象
 * @return {String} 格式化后的日期
 */
const dateFormat = options => {
    if (options.timeStamp) {
        const len = options.timeStamp.toString().length;
        if (![10, 13].includes(len)) {
            throw new Error('不是正确的时间戳,请传入秒、毫秒时间戳');
        }
        options.date = new Date(len === 10 ? options.timeStamp * 1000: options.timeStamp);
    }
    return dateTransfomr(options);
};


// 使用示例
dateFormat({ timeStamp: 1667356326 }) // 2022-11-02 10:32:06 
dateFormat({ timeStamp: 1667356326, format: '%Y/%M/%D'}) // 2022/11/02
dateFormat({ timeStamp: 1667356326, format: '%Y-%M-%D' }) // 2022-11-02
dateFormat({ timeStamp: 1667356326, format: '%Y/%M/%D %h:%m:%s' }) // 2022/11/02 10:32:06

dateFormat({ isShowWeek: true}) // 2023-07-05 17:30:35 星期三
dateFormat({ isShowWeek: true, format: '%Y/%M/%D'}) // 2023/07/05 星期三
dateFormat({ isShowWeek: true, format: '%Y-%M-%D' }) // 2023-07-05 星期三
dateFormat({ isShowWeek: true, format: '%Y/%M/%D %h:%m:%s' }) // 2023/07/05 17:30:35 星期三