应改用SheetJS手动构造xlsx文件,将日期字段转为Date实例并设置单元格格式;CSV无法控制格式,后端导出才是稳定解法。
导出 Excel 时日期列变成数字时间戳?
直接调用 table.exportfile() 导出的 excel,日期字段(如 applytime、approvtime)大概率显示为一串数字(例如 1712345678000),不是 2024-04-05 或 2024/04/05 10:30:00。这不是 layui 的 bug,而是它默认把字段值原样写入——如果后端返回的是时间戳或 iso 字符串,而你没在导出前转成 excel 能识别的 date 对象,excel 就只能当普通数字处理。
用 SheetJS 手动构造 sheet 并设置日期列类型
要真正控制 Excel 单元格格式(包括日期),必须绕过 table.exportFile(),改用 xlsx 库生成真实 .xlsx 文件。关键点是:日期字段必须是 JS Date 实例,且需在写入前明确指定该列为日期格式(否则 Excel 仍可能自动识别失败)。
- 引入完整版 SheetJS:
<script src="https://cdn.sheetjs.com/xlsx-0.20.2/package/dist/xlsx.full.min.js"></script> - 从
table.cache['yourTableId']拿数据,对目标日期字段做转换:new Date(item.applytime);若字段是字符串(如"2024-04-05"),先new Date(item.applytime.replace(/-/g, '/'))避免 Safari 兼容问题 - 用
XLSX.utils.aoa_to_sheet()构造 sheet 时,传入二维数组([headers, rows]),其中rows的对应列值必须是Date类型 - 导出前手动设置列格式(可选但推荐):
ws['!cols'] = [{wpx:120}, {wpx:120}, {wpx:150}];;再通过ws['A2'].z = 'yyyy-mm-dd'等方式设单元格格式(注意:SheetJS 的z属性只对单个单元格生效,批量设需遍历)
CSV 导出无法设置日期格式,别白费劲
如果你坚持用 table.exportFile(..., 'csv'),那「设置日期格式」本身就是伪命题。CSV 是纯文本,没有单元格格式概念。Excel 打开 CSV 时会自动猜测类型——它可能把 2024-04-05 当成日期,也可能当成文本或错误数字。你唯一能做的,是确保导出字符串符合 Excel 的区域识别习惯(比如用 YYYY/MM/DD 格式,避免 DD/MM/YYYY 在英文系统下错乱),但无法强制锁定格式。
后端导出才是日期格式稳定的解法
当表格启用了服务端分页、权限过滤,或需要统一日期格式(如全部导出为 yyyy年MM月dd日),前端拼接就不可靠。此时应走后端接口,由服务端用 POI(Java)、openpyxl(Python)等库生成真实 Excel,并精确控制每列的数据类型和格式。前端只需触发下载,传参带好筛选条件(如 export_type=selected&ids=1,2,3),不要试图在浏览器里“模拟 Excel 格式”。
最常被忽略的一点:即使你用 SheetJS 把日期转成了 Date 对象,如果导出的 Excel 文件没嵌入正确的 locale 信息(比如 en-US 或 zh-CN),部分 Excel 版本仍可能按本地设置误判格式。真要 100% 稳定,还是得后端生成。


















