excel 表格里的日期是2020/5/4在js中读取出来变成了2020/5/5,这个问题怎么解决?

百度99%的人都是代码如下实现:

// excel读取2018/01/01这种时间格式是会将它装换成数字类似于46254.1545151415 numb是传过来的整数数字,format是之间间隔的符号
    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)
    },
  console.log(formatDate(42618, '/')) // 2016-9-5

这段代码在正常平年是没有问题。但是移到闰年就出现了问题。这是js读取excel的时间如2020/5/4,是从1900/0/0开始到2020/5/4的天数,而new Date()的开始时间1970年。所以导致了上面这段代码得到time是2090,而2090不是闰年。所以导致了本来应该显示2020/5/4,结果显示了2020/5/5。

上面代码new Date((numb - 1) * 24 * 3600000 + 1)修改为new Date(1900,0,(numb - 1)),nump是js读取是从1900/0/0到excel的日期的天数。为什么要nump-1.是因为Excel 中有个 bug:

它以为 1900 年是闰年,所以我们拿到的天数都会多了一天,因为转换之前还需要先进行减一操作…

还是

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值