疑问:44303.02359是什么日期格式?如何用JavaScript解析?
解析Google Sheets/Excel风格的日期序列号
格式说明
你遇到的44303.02359是Google Sheets和Excel通用的日期序列号格式:
- 整数部分:从1900年1月1日开始累计的天数(Windows版Excel/Sheets的起始基准日期)
- 小数部分:当天时间占全天的比例(0代表00:00:00,1代表23:59:59)
比如44303就是1900年1月1日加上44303天,对应2021年4月17日;0.02359则对应约0小时34分钟10秒。
JavaScript解析方法
JavaScript的new Date()不直接支持这种格式,需要手动计算转换,还要注意Excel的历史bug:它错误地将1900年判定为闰年,导致序列号≥60时需要额外减1天修正误差。
实现代码如下:
function parseSheetsDate(serial) { const days = Math.floor(serial); const timeFraction = serial - days; // 修正1900年闰年的错误 const adjustedDays = days >= 60 ? days - 1 : days; // 1900年1月1日的UTC时间戳 const epoch = new Date('1900-01-01').getTime(); const msPerDay = 24 * 60 * 60 * 1000; // 一天的毫秒数 // 计算总毫秒数:基准时间 + 调整后天数的毫秒 + 时间部分毫秒 const totalMs = epoch + adjustedDays * msPerDay + timeFraction * msPerDay; return new Date(totalMs); } // 测试示例 const targetDate = parseSheetsDate(44303.02359); console.log(targetDate.toLocaleString()); // 输出对应本地时区的2021年4月17日及对应时间
内容的提问来源于stack exchange,提问作者Kevin Danikowski
相关产品推荐
相关产品推荐

