从nodejs中的xlsx文件获取统一的日期格式

时间:2017-10-10 11:30:15

标签: node.js excel date

我正在从Excel工作表中读取数据,第5列是日期字段。我有以下逻辑来确保输入日期转换为YYYY-MM-DD格式 -

var valid_from = new Date(data[counter][5]);
valid_from_new = var formatedDate = moment(valid_from).format("YYYY-MM-DD");
reqBody.valid_from = valid_from_new.toString();

我开始使用日期2017-10-10,我可以通过我的节点应用阅读它。只要我不在Microsoft Excel 2010中编辑此字段,它就适用于我。如果我编辑它或只是查找/替换值,我会在reqBody.valid_from中获得unix默认日期(1970-01-01)。

要了解更换后会发生什么,我检查了如果我将2017-10-10替换为2017-10-20然后“清除格式”(excel实用程序),我会在43028显示表格,而对于日期2017-10-10,它保持不变,即2017-10-10。我不明白为什么excel会像这样。

我的申请可以统一处理吗?我只想让“YYYY-MM-DD”格式适用于任何excel版本。如果我可以在输入文件之前进行一次格式更改或清除格式,那就没关系了。它可以工作。

1 个答案:

答案 0 :(得分:0)

  

我不明白为什么excel会像这样。

Excel表现得像2017-10-10作为序列日期。这意味着它是一个整数,表示自1900年1月1日以来Windows系统已经过去的天数。 (可能是1905年或类似的mac)。在你的特定情况下,它显然是43028.它显示一个转换日期,人们在你的情况下读作2017-10-10格式。您将注意到这一点,因为单元格的格式是某种日期或自定义用户格式。如果您通过引导'将日期作为文本输入,则会注意到更改单元格格式时格式不会更改。日期实际上只是文本而不是格式化日期。以excel日期格式输入的数字,excel通常会尝试自动将它们转换为序列日期值。它有一个内置的格式列表,我相信它也会查看你的系统设置格式。

作为旁注,数字的小数部分代表时间。一天的分数。 0表示00:00:00,。5表示12:00:00。

  

我的申请可以统一处理吗?

我确信答案是"是"但超出了我的专长。我非常怀疑这是因为你的代码最初是以文本形式处理的。当它从excel接收表示excel日期的整数时出现问题。