在JavaScript中将日期(dd / mm / yyyy)转换为Excel序列号

时间:2019-06-11 20:05:26

标签: javascript excel date xlsx

说明

我正在 Angular项目 npm install xlsx )上使用 XLSX 生成Excel文件,但是我遇到了显示问题一个确切的日期。如果我尝试使用JavaScript日期对象,它将以某种方式失去准确性并显示错误的日期。如果我尝试使用与“ dd / mm / yyyy”相对应的字符串,它也会失败。

我发现要使Microsoft Excel具有dd / mm / yyyy格式的精确日期,您需要使用遵循模式的Excel Serial Format。

以下是这种格式的一些示例:

  • 日期::1900年1月1日-序列: 1
  • 日期::1900年2月1日-序列号: 2
  • 日期: 1900年9月4日-序列号: 100
  • 日期::190/09/26-序列号: 1000
  • 日期::19/08/09-序列号: 5000
  • 日期::1/05/18-串行: 10000
  • 日期::1998年7月24日-序列号: 36000

*您可以在Microsoft Excel上尝试检查更多示例。

上面是我需要的功能的原型,它将接收一个日期(dd / mm / yyyy)并返回等效的序列号。

private JSDateToExcelDate(inDate) {
   if(inDate != null) { 
   //TO DO
   }
}

其他信息:

xlsx框架可以修改任何告诉其值类型将为Date的单元格。考虑到这一点,我需要的只是序列号格式的日期。

更新11/06/2019-20:14

我找到了具有以下功能的解决方案,该功能可提供所需的电话号码。我部分解决了它,因为框架XLSX可能正在更改值,因为我得到的输出为“ 31/12/1969 21:00:16”,我发现这是默认输出,原因是日期无效。 (我已经在Angular Project上创建了该函数,因此它可能包含特定的语法

private JSDateToExcelDate(date) {
    var temp: any;
    temp = new Date(date);
    if(date != "NaN" && date != "Invalid Date") {
      var days = Math.round((temp.setHours(0,0,0,0) - <any>new Date(1899, 11, 30)) / 8.64e7);
      let ret:any = (days).toFixed(10);
      if(!isNaN(ret)) {
        return ret;  
      }
    }
    return '';
  }

1 个答案:

答案 0 :(得分:0)

var start = new Date('1900-01-01')
return (inDate - start)/(1000 * 60 * 60 * 24);