我正在导入Excel文件中的数据,它有date列。在我的应用程序中,date列的值是一个序列号,比如代表01/01/2018
的43101.622083333335
。
当将这个序列号从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
有什么帮助吗?提前谢谢。
发布于 2019-07-23 06:51:00
我不认为这是moment
库的问题。您似乎没有使用new Date(excelDate)
的有效构造函数参数来调用Date
(请参阅Date
here的官方文档)。
Date
类不理解“Excel time”的概念,但是它理解unix时间戳的概念。如果您参考this post,您可以看到如何将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);
https://stackoverflow.com/questions/57145840
复制相似问题