js转化excel日期

js转化excel日期(亲测 ~ _~)

因使用js-xlsx读取excel得到的日期不是正常的日期格式,所以从网上找了一下转化的方法,但是没找到一个合适的,下面展示我所采坑的两个方法,分别为百度出来的前两位,望采纳

1. 采坑的两个方法
formatDate(numb, format) {
    const time = new Date((numb - 1) * 24 * 3600000 + 1)
    time.setYear(time.getFullYear() - 70)
    const year = time.getFullYear() + ''
    const month = time.getMonth() + 1 + ''
    const date = time.getDate() - 1 + ''
    if (format && format.length === 1) {
        return year + format + month + format + date
    }
    return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
}

此方法因为有time.getDate() - 1, 所以当转化date为1的时候会出错,如:43831
在这里插入图片描述

formatDate(numb, format) {
    let time = new Date((numb - 1) * 24 * 3600000 + 1)
    time.setYear(time.getFullYear() - 70)
    let year = time.getFullYear() + ''
    let month = time.getMonth() + 1 + ''
    let date = time.getDate() + ''
    if(format && format.length === 1) {
        return year + format + month + format + date
    }
    return year+(month < 10 ? '0' + month : month)+(date < 10 ? '0' + date : date)
}

此方法和上个方法相似,只是将date - 1 去掉了,但是该方法在转化某些时间的时候会出错,如44202对应为2020-11-06,该方法却转化为2020-11-07

在这里插入图片描述

2. 最终方法

因为js-xlsx得到的数字为该时间距1900-1-1的天数,所以结合以上两个方法得到

 /**
     * 格式化excel传递的时间
     * @param numb 需转化的时间 43853
     * @param format 分隔符 "-"
     * @returns {string} 2020-1-22
     */
formatExcelDate (numb, format = "-") {
    // 如果numb为空则返回空字符串
    if (!numb) {
        return "";
    }
    let time = new Date(new Date("1900-1-1").getTime() + (numb - 1) * 3600*24*1000);
    const year = time.getFullYear() + '';
    const month = time.getMonth() + 1 + '';
    const date = time.getDate();
    if (format && format.length === 1) {
        return year + format + (month < 10 ? '0' + month : month) + format + (date < 10 ? '0' + date : date)
    }
    return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
}

在这里插入图片描述
亲测,有效!!!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值