sheetjs导出表格时间错误问题
最近使用sheetjs,前端web去导出生成excel,xlsx表格。其中遇到一种问题,那就是时间出错了!比如多出8小时43秒,少了43秒。看到这种问题的时候,我也一脸懵逼。先上图!


- 不过在有些人电脑上导出时间确实非常的正确!

错误显示的原因?
我找到了相关的文章描述该问题 GitHub地址
在当地时间 1901-01-01 00:00:00,上海时区由 LMT(Local Mean Time)切换为 CST (China Standard Time),与 GMT 的时差由 + 8:05:43 调整为 + 8:00:00。
所以有些机器上的时区切换导致时差调整不正确,所以前端js导出表格的时候,字符串转换成Date类型出现的时差误差错误,所以在表格生成的时候,日期出现多了多出8小时43秒,少了43秒等等现象。
解决办法
直接算出误差的时间秒数,加上去就行了,下面就是js代码。
/**
* 获取当前机器时间时区是否存在时间误差
* @param {Date} date 比对的误差时间
* @returns {Number} 误差毫秒
*/
function getTimezoneOffsetMS(date) {
var time = date.getTime();
var utcTime = Date.UTC(date.getFullYear(),
date.getMonth(),
date.getDate(),
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds());
return time - utcTime;
}
/**
* 矫正日期误差
* @param {Date} date 需要矫正的日期
* @returns {Date} 返回矫正后的日期
*/
function fixDate(date) {
const importBugHotfixDiff = (function () {
const basedate = new Date(1899, 11, 30, 0, 0, 0);
const dnthreshAsIs = (new Date().getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000;
const dnthreshToBe = getTimezoneOffsetMS(new Date()) - getTimezoneOffsetMS(basedate);
return dnthreshAsIs - dnthreshToBe;
}());
return (new Date(date.getTime() + importBugHotfixDiff));
}
/**
* 是否需要矫正日期
* @param {Date} date 需要判断的日期
* @returns {Boolean} 是否需要矫正
*/
function isNeedFixDate(date) {
const baseDate = new Date(1899, 11, 30, 0, 0, 0);
const baseDateUtc = new Date(Date.UTC(1899, 11, 30, 0, 0, 0));
const timezoneOffsetFix =
baseDateUtc.valueOf() +
baseDate.getTimezoneOffset() * 60000 -
baseDate.valueOf();
return new Date(date.valueOf() - timezoneOffsetFix).getTimezoneOffset() !== baseDate.getTimezoneOffset();
}
// 正常情况 时差没问题的 会显示这样
fixDate(new Date('2023-01-02 00:00:00')) // Mon Jan 02 2023 00:00:00 GMT+0800 (GMT+08:00)
// 下面是时差有问题的
fixDate(new Date('2023-01-02 00:00:00')) // Sun Jan 01 2023 23:59:17 GMT+0800
按照修改后的时间,再调用
sheetjs的方法导出xlsx后,时间就不会出错了。
sheetjs导出表格时间错误问题的更多相关文章
- php导出excel时间错误(同一个时间戳,用date得到不同的时间)
通过在date之前设置时区解决了 date_default_timezone_set("Asia/Shanghai"); $schedule_time = date("Y ...
- vue中使用导出表格功能
1.下载依赖 npm install -S file-saver xlsx npm install -D script-loader 2.在src下创建vendor文件夹,并在文件夹中放两个文件 Bl ...
- php导出表格两种方法 ——PhpExcel的列子
php常用的导出表格有两种方法,第一种是输出表格,这种方法打开的时候有警告提示,一般导出表格会用phpexcel,这个导出比较灵活,而且还可以设置表格的样式. 第一种导出例子 /** * 执行导出 * ...
- 关于Java中excel表格导出的总结(Java程序导出模板和Java根据模板导出表格两种实现方式)
导出excel通用模板(程序定义模板导出) 转载原文:https://www.jianshu.com/p/5c7b359a159c 如下代码,本方法主要用于程序定义模板格式,并导出文件.该方法将定义和 ...
- JAVA POI XSSFWorkbook导出扩展名为xlsx的Excel,附带weblogic 项目导出Excel文件错误的解决方案
现在很多系统都有导出excel的功能,总结一下自己之前写的,希望能帮到其他人,这里我用的是XSSFWorkbook,我们项目在winsang 用的Tomcat,LInux上用的weblogic服务器, ...
- html导出表格xls格式
<!DOCTYPE html> <html> <head> <title>table2xls</title> <meta charse ...
- 百度地图里面搜索到的公司商家电话导出表格?怎样将把百度地图里面搜索到的公司 电话 地址 等数据导出excel里?
好多人在问:如何将百度地图里面搜索到的公司商家电话导出表格?怎样将把百度地图里面搜索到的公司 电话 地址 等数据导出excel里? 现在,很多人都在网络上找商家,联系业务. 百度地图里有很多的商家联系 ...
- [双系统linux] ----双系统切换导致系统时间错误
安装了linux双系统以后,发现每次双系统切换以后系统时间总会错误. 原因:Linux和win7(win10)双系统时间错误问题 时间相差8小时 MAC/linux 将系统硬件时间看待为UTC, 即U ...
- Win/Lin 双系统时间错误的调整 (转)
Win/Lin 双系统时间错误的调整 http://jingyan.baidu.com/article/154b46317b25ca28ca8f41e8.html | 浏览:1070 | 更新:201 ...
- C# DevExpress GridControl导出表格【转】
DevExpress的GridControl提供方便的数据导出功能,可以方便的导出Exce,PDF,Html页面,world形式,无需写额外的代码,方便.快捷. /// <summary> ...
随机推荐
- 一键自动化博客发布工具,用过的人都说好(infoq篇)
infoq的博客发布界面也是非常简洁的.首页就只有基本的标题,内容和封面图片,所以infoq的实现也相对比较简单. 一起来看看吧. 前提条件 前提条件当然是先下载 blog-auto-publishi ...
- 自定义Naive UI的数据表格Data Table中按钮Button图标
在Naive UI官网中详细介绍了[数据表格 Data Table](数据表格 Data Table - Naive UI)的使用方式 { title: "Action", key ...
- 动态类型语言 VS 静态类型语言
一. 运行期动态修改类型结构 动态编程语言是高级编程语言的一个类别,在计算机科学领域已被广泛应用.它是一类在运行时可以改变其结构的语言:例如新的函数.对象.甚至代码可以被引进,已有的函数可以被删除或是 ...
- Hibernate双向关联导致Java对象转换为JSON字符串时死循环问题的分析与解决方案
引言: 本文描述了在SSH框架中,多个持久层对象相互引用,从而引发分页查询中,查询所得的持久化对象转换为JSON字符串报错的原因及解决方案 使用EasyUI框架的小伙伴们都知道,在使用datagrid ...
- Python并行运算——threading库详解(持续更新)
0. 写在前面:进程和线程 博文参考: Python的并行(持续更新)_python 并行-CSDN博客 <Python并行编程 中文版> 一些相关概念请见上一篇博文. 1. 在Pytho ...
- Qt-FFmpeg开发-保存视频流裸流(11)
音视频/FFmpeg #Qt Qt-FFmpeg开发-保存视频流裸流 目录 音视频/FFmpeg #Qt Qt-FFmpeg开发-保存视频流裸流 1.概述 2.实现效果 3.FFmpeg保存裸流代码流 ...
- svn递归添加目录下面所有文件
进入根目录:$ svn add * --force A foo.c A somedir/bar.c A otherdir/docs/baz.doc
- git push遇到的问题“Please make sure you have the correct access rights and the repository exists.”
问题:今天在用idea往github推送代码的时候,出现了下面的报错 原因:是ssh key有问题,连接不上服务器 解决: 1.得重新在git设置一下身份的名字和邮箱 git config --glo ...
- Visual Studio编程效率提升技巧集(提高.NET编程效率)
前言 本文大姚将为你介绍一些Visual Studio的使用技巧和建议,旨在帮助.NET开发者更加高效地利用Visual Studio进行编程工作.无论你是.NET初学者还是经验丰富的.NET开发者, ...
- 一文了解 - -> SpringMVC
一.SpringMVC概述 Spring MVC 是由Spring官方提供的基于MVC设计理念的web框架. SpringMVC是基于Servlet封装的用于实现MVC控制的框架,实现前端和服务端的交 ...