首页 > 其他分享 >XLSX.js解析Excel中的日期格式数据遇到的问题

XLSX.js解析Excel中的日期格式数据遇到的问题

时间:2024-10-26 17:36:30浏览次数:7  
标签:XLSX 01 Excel js 日期 num 解析 1900

使用xlsx.js读取Excel中的日期有两种方式:

  1. XLSX.read(file, { type: 'binary' })
  2. XLSX.read(file, { type: 'binary', cellDates: true })

通过第一种方式读取日期,解析结果是Excel中保存的数字(Excel会将日期保存为数字。例如,将2020/09/30由日期格式改成文本格式时,会得到一个44104这样的数字,它代表的是从1900/01/01开始,到该日期的天数。)

拿到这个数字后,通过moment.js对其进行格式转化:

moment('1900/01/01').add(moment.duration({ 'days': 44104 - 1 })).format('YYYY/MM?DD')
// => 2020/10/01

然而得到的日期会比实际日期2020/09/30多一天,具体原因是因为在Excel中, 1900年被错误地当成了闰年,1900/02/28后面的日期对应的数字比实际多了1900/02/29这一天。需要在进行特殊处理:

const START_TIME = '1900/01/01'
const FORMAT = 'YYYY/MM/DD'
export const formatExcelDate = (num) => {
 let duration = num - 1
 // 1900/2/29的num为60
 if (num > 60) {
 // 对于num大于60的需解析日期,要减去多的1900/2/29日的那一天
 duration = num - 2
 }
 return moment(START_TIME).add(moment.duration({ 'days': duration })).format(FORMAT)
}
​
formatExcelDate(44104) // => 2020/09/30

通过第二种方式读取日期,解析结果是一个日期对象。

一般情况下,对于1901/01/01以前的日期如1900/02/05,会解析为Sun Feb 04 1900 00:05:00 GMT+0805 (中国标准时间),对于1901/01/01及以后的日期如2020/05/20,会解析为Tue May 19 2020 23:59:17 GMT+0800 (中国标准时间)

可以看到1901/01/01后的解析日期比实际晚了43秒,具体原因未知。还有另外一个问题就是,同一日期在不同电脑上解析的结果不一致,原因暂时未知。

标签:XLSX,01,Excel,js,日期,num,解析,1900
From: https://www.cnblogs.com/huaan011/p/18504232

相关文章

  • XLSX.js解析Excel中的数据,<input type='file' />控件中
    在页面中添加一个:<inputtype="file"class="txt"style="width:300px;height:25px;line-height:25px;color:#000000;"id="file01"/>在页面中添加javascript代码:document.getElementById("file01").addEventLis......
  • Node.js如何处理并发连接?
    Node.js如何处理并发连接?在现代web开发中,处理并发连接是一个对于构建高性能服务器至关重要的话题。Node.js是一个使用JavaScript作为编程语言的服务器端环境,内置非阻塞I/O模型,非常适合处理并发连接。在这篇博客中,我们将深入探讨Node.js如何有效地管理并发连接,并......
  • js逆向实战之某市场监管公告服务平台返回数据解密
    声明:本篇文章仅用于知识交流分享,不用于其他用途练习网站:https://jzsc.mohurd.gov.cn/data/company解密过程分析访问网站,随便选择一个区域,点击查询,看触发哪些数据包。只有一个数据包,且其响应数据一看就是经过加密的。有经验的人就会条件反射是拦截器,全局搜索interceptors。......
  • Linux系统安装Nodejs的详细教程
    Linux系统安装Nodejs(详细教程)介绍:​Node.js发布于2009年5月,由RyanDahl开发,是一个基于ChromeV8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型,[1]让JavaScript运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚......
  • Nuxt.js 应用中的 server:devHandler 事件钩子详解
    title:Nuxt.js应用中的server:devHandler事件钩子详解date:2024/10/26updated:2024/10/26author:cmdragonexcerpt:server:devHandler是Nuxt.js中的一个生命周期钩子,它在Nitro开发服务器注册开发中间件时被调用。使用这个钩子,开发者可以为开发服务器添加......
  • Nuxt.js 应用中的 pages:extend 事件钩子详解
    title:Nuxt.js应用中的pages:extend事件钩子详解date:2024/10/25updated:2024/10/25author:cmdragonexcerpt:pages:extend是Nuxt.js中的一个生命周期钩子,在页面路由解析完成后被调用。这个钩子允许开发者添加、修改或删除路由配置,为自定义页面路由的管理提......
  • CesiumJS 案例 P6:添加图片图层、添加图片图层并覆盖指定区域
    CesiumJSCesiumJSAPI:https://cesium.com/learn/cesiumjs/ref-doc/index.htmlCesiumJS是一个开源的JavaScript库,它用于在网页中创建和控制3D地球仪(地图)一、添加图片图层<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"......
  • Nuxt.js 应用中的 server:devHandler 事件钩子详解
    title:Nuxt.js应用中的server:devHandler事件钩子详解date:2024/10/26updated:2024/10/26author:cmdragonexcerpt:server:devHandler是Nuxt.js中的一个生命周期钩子,它在Nitro开发服务器注册开发中间件时被调用。使用这个钩子,开发者可以为开发服务器添加自定义......
  • 基于Vue+NodeJS+express的预约上门维修服务运营与数据分析系统(源码+node+vue+部署文
    收藏关注不迷路!!......
  • Java EasyExcel 导出报内存溢出的原因与解决方案
    JavaEasyExcel导出报内存溢出的原因与解决方案在现代企业级应用开发中,数据导出功能是一项常见且重要的任务。随着数据量的不断增长,如何高效、稳定地完成数据导出成为开发者面临的一大挑战。EasyExcel是阿里巴巴开源的一款基于Java的Excel处理工具,它以其高效、简洁的特性,广泛......