【问题标题】:Converting Excel date to Moment date gives a wrong year output将 Excel 日期转换为 Moment 日期会产生错误的年份输出
【发布时间】:2019-07-22 12:14:16
【问题描述】:

我正在导入 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.js momentjs


    【解决方案1】:

    我不认为这是 moment 库的问题。您似乎没有使用带有 new Date(excelDate) 的有效构造函数参数调用 Date(请参阅 Date here 的官方文档)。

    Date 类不理解“Excel 时间”的概念,但它理解 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);
    

    【讨论】:

    • 感谢您的帮助,但我在这篇文章 stackoverflow.com/questions/20943089/… 的帮助下更新了您的答案以获得所需的输出。
    • var unixTimestamp = (excelDate-25569)*86400 行应该是 var unixTimestamp = (excelDate-25569)*86400000 -- 偏移值需要乘以毫秒/小时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多