读取数据
1 |
|
问题记录
2020-11-19
关于js导入Excel时,Excel的(年/月/日)日期是五位数字的问题
转自:https://blog.csdn.net/qq_40662765/article/details/109326067
前言
近期实现了一个前端导入Excel的需求,然后问题就来了,Excel传来的日期是一串数字!!!
就比如:2020年10月28日是44132。根据度娘得知Excel存储的日期是从1900年1月1日开始按天数来计算的,也就是说1900年1月1日在Excel中是1。
思路
我一开始的想法是:
因为时间戳是从1970年1月1日算起的(时间戳为0的时候是1970年1月1日)也就是说new Date(0).toLocaleDateString('zh')
的值是1970/1/1
。
而1970年1月1日这一天在Excel中是25569
,那就令从Excel中获取到的值减去25569,然后再乘以24*60*60*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中年月日
日期的转换,不包含时分秒
):
1 | /** |
本文链接: http://www.ionluo.cn/blog/posts/238fbc80.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!