【问题标题】:Convert Javascript Date object to Excel serial date number将 Javascript 日期对象转换为 Excel 序列日期号
【发布时间】:2022-01-21 16:55:22
【问题描述】:

所以我有一个带有年、月、日、小时、分钟、秒和毫秒数据的 Javascript 日期对象,我需要将此对象转换为 Excel 序列号,但我没有找到方法。 我发现了如何只转换一个 Date 对象,但我发现的方法没有考虑时间部分。

有什么建议吗? 谢谢, 问候。

【问题讨论】:

  • “excel序列号”是什么意思?你能分享一个例子吗?
  • 根据记忆,它是自 1900 年 1 月 1 日以来的整数天数,时间为小数部分。请注意,对于 1900 年之前的日期,整数部分向后,但时间部分向前,1899 年 12 月 31 日中午是 -1.5(所以减去一天,加上时间上的 0.5 天),而不是 -0.5。

标签: javascript excel datetime datetime-format


【解决方案1】:

我终于可以正确转换它了,我使用了以下代码:

let date = new Date();
let converted = 25569.0 + ((date.getTime() - (date.getTimezoneOffset() * 60 * 1000)) / (1000 * 60 * 60 * 24));

谢谢大家。

【讨论】:

    【解决方案2】:

    试试这个:

    function ExcelDateToJSDate(serial) {
       var utc_days  = Math.floor(serial - 25569);
       var utc_value = utc_days * 86400;                                        
       var date_info = new Date(utc_value * 1000);
    
       var fractional_day = serial - Math.floor(serial) + 0.0000001;
    
       var total_seconds = Math.floor(86400 * fractional_day);
    
       var seconds = total_seconds % 60;
    
       total_seconds -= seconds;
    
       var hours = Math.floor(total_seconds / (60 * 60));
       var minutes = Math.floor(total_seconds / 60) % 60;
    
       return new Date(date_info.getFullYear(), date_info.getMonth(), date_info.getDate(), hours, minutes, seconds);
    }
    

    或者你可以使用:

    function SerialDateToJSDate(serialDate) {
      var days = Math.floor(serialDate);
      var hours = Math.floor((serialDate % 1) * 24);
      var minutes = Math.floor((((serialDate % 1) * 24) - hours) * 60)
      return new Date(Date.UTC(0, 0, serialDate, hours-17, minutes));
    }
    

    【讨论】:

    • 问题是将Date转换成excel序列号。你正在做相反的事情......
    • 这仍在将序列日期转换为 JS 日期。问题是询问相反的方向,即将 JS 日期转换为序列号。你介意解释一下hours - 17 的来源吗?
    猜你喜欢
    • 2013-04-20
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    相关资源
    最近更新 更多