首页 > 解决方案 > 将 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

有什么帮助吗?提前致谢。

标签: node.jsmomentjs

解决方案


我不认为这是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);

推荐阅读