当前位置: 首页 > news >正文

关于js导入Excel时,Excel的(年/月/日)日期是五位数字的问题。以及对Excel日期存在的错误的分析和处理。

近期实现了一个前端导入Excel的需求,然后问题就来了,Excel传来的日期是一串数字(非时间戳)!!!
就比如:2020年10月28日是44132。
Excel存储的日期是从1900年1月1日开始按天数来计算的,也就是说1900年1月1日在Excel中是1。
转化的思路和对Excel中的错误的处理
我一开始的想法是:

因为时间戳是从1970年1月1日算起的(时间戳为0的时候是1970年1月1日)也就是说new Date(0).toLocaleDateString(‘zh’)的值是1970/1/1。
而1970年1月1日这一天在Excel中是25569,那就令从Excel中获取到的值减去25569,然后再乘以246060*1000获取到这一天的毫秒数,再new Date(这个毫秒数)就能得到转换后的日期了。

不过刚刚在写这篇博客之前再次测试发现这样写有漏洞…

就是当Excel的值小于61的时候转换的时间跟正常时间相差一天
在这里插入图片描述
问题所在的原因:

在Excel中:

1是1900年01月01日
59是1900年02月28日
60是1900年02月29日 1900年是平年,没有这一天!!!错误的原因就是这个
61是1900年03月01日
62是1900年03月02日
解决办法:既然60之前相差一天 那就做个判断 <60的时候 多减去一天
最终代码
经过解决和我自己测试后的最终代码如下(仅适用于Excel中年月日日期的转换,不包含时分秒)

/*** 格式化Excel表中存储的年月日日期* @param {number} num - excel存储的数字* @param {string} [format = '-'] - 年月日的间隔符,默认为'-'* @returns {string} 格式化后的日期*/
function formatExcelDate(num, format = '-') {if (!/^\d+$/.test(num)) returnnum = parseInt(num)let millisecond = 0 // 转化后的毫秒数if (num > 60) { // 对大于60的日期进行减1处理millisecond = (num - 25568 - 1) * 3600 * 24 * 1000} else {millisecond = (num - 25568) * 3600 * 24 * 1000}const date = new Date(millisecond) // 根据转化后的毫秒数获取对应的时间const yy = date.getFullYear()const m = date.getMonth() + 1const mm = m >= 10 ? m : '0' + mconst d = date.getDate()const dd = d >= 10 ? d : '0' + dreturn yy + format + mm + format + dd // 返回格式化后的日期
}
http://www.dtcms.com/a/581318.html

相关文章:

  • 内网穿透的应用-摆脱局域网!Stable Diffusion3.5 结合cpolar使用更方便
  • postgresql客户端升级
  • 16openlayers加载COG(云优化Geotiff)
  • 万网做的网站咋样wordpress 用户api
  • 小白学规则编写:雷池 WAF 配置教程,用 Nginx 护住 WordPress 博客
  • 升鲜宝生鲜配送供应链管理系统---PMS--商品品牌多语言存储与 Redis 缓存同步实现
  • Spark的容错机制
  • spark性能优化2:Window操作和groupBy操作的区别
  • 用spark-md5实现切片上传前端起node模拟上传文件大小,消耗时间
  • 做网站优化竞价区别开发工具的种类及使用方法
  • Mac安装pnpm步骤以及会出现的问题
  • ofd在线预览js+springboot跳转
  • 基于SpringBoot实习管理系统的设计与实现的设计与实现
  • abuild的使用说明-如何使用vscode进行c/c++开发
  • 宝山php网站开发培训可以看那种东西的手机浏览器
  • 算法28.0
  • Spring Cloud中的@LoadBalanced注解实现原理
  • 建站快车的使用方法电子商务网站对比分析
  • 分布式Web应用场景下存在的Session问题
  • 12.线程(一)
  • 如何做二维码跳转到网站建设网站专家
  • 前端i18n实现中英文切换
  • Java基础——常用算法4
  • SQL50+Hot100系列(11.7)
  • Python 第二十六节 多线程应用详细介绍及使用注意事项
  • 网站建设交接表wordpress编程视频教程
  • LeafView(轻量级电脑图片查看器) v3.8.1 中文绿色便携版
  • MySQL死锁问题分析与解决方案
  • shell中获取达梦信息方法示例
  • calibre QRC提取寄生参数