node.js - 将 Excel 日期转换为 Moment 日期会产生错误的年份输出
问题描述
我正在将数据导入 Excel 文件,它有日期列。在我的应用程序中,该日期列值以序列号的43101.622083333335
形式出现,例如01/01/2018
.
当将此序列号从 Excel 转换回它所代表的正常日期时,它会给出错误的年份。例如,它给出01-Jan-1970
而不是01-Jan-2018
``
var moment = require('moment');
var excelDate = 43101.622083333335;
var date = moment(new Date(excelDate));
var dateWithNewFormat = date.format('DD-MMM-YYYY');
console.log(dateWithNewFormat);
``
输出:01-Jan-1970
代替01-Jan-2018
有什么帮助吗?提前致谢。
解决方案
我不认为这是moment
图书馆的问题。似乎您没有Date
使用有效的构造函数参数调用new Date(excelDate)
(请参阅Date
此处的官方文档)。
该Date
课程不了解“Excel 时间”的概念,但确实了解 unix 时间戳的概念。如果您参考这篇文章,您可以了解如何将 Excel 时间转换为 unix 时间戳,具体取决于您使用的 Excel 版本。
然后,我会将您的代码更改为:
var moment = require('moment');
var excelDate = 43101.622083333335;
var unixTimestamp = (excelDate-25569)*86400 //as per the post above, convert Excel date to unix timestamp, assuming Mac/Windows Excel 2011 onwards
var date = moment(new Date(unixTimestamp)); //Pass in unix timestamp instead of Excel date
var dateWithNewFormat = date.format('DD-MMM-YYYY');
console.log(dateWithNewFormat);
推荐阅读
- javascript - 使用 vanilla javascript 隐藏包含某些文本的标签
- java - SpringData MongoDB Repositories 查询嵌套对象中的多个字段
- java - 如何使我的过滤器模式更通用
- jspm - 为什么 JSPM 不捆绑捆绑模块的依赖关系?
- excel - 在没有VBA的情况下更新excel中的动态下拉列表
- unity3d - Unity2D 中的照明在手机上看起来与在编辑器中不同
- dataset - 使用带有多个 aeneas 文本文件的 Aeneas 强制对齐
- php - 无法使用 Codeigniter 更新我的数据库
- javascript - 将数字四舍五入到最接近的“平滑”数字的功能
- node.js - 为什么我们需要用 express 发送这样的请求,为什么我们不能简单地使用 html 呢?