From 64e8998e59ff668e353ed764c06de3c106089734 Mon Sep 17 00:00:00 2001 From: Ivan Trusov Date: Fri, 13 May 2022 11:00:36 +0300 Subject: [PATCH] Fix basedate calculation Correct numdate / datenum calculation to eliminate problems with timezones that equal nowadays but were different in the past (e.g. Europe/Minsk and Europe/Moscow) --- xlsx.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/xlsx.js b/xlsx.js index 8eb7742..b1bedd3 100644 --- a/xlsx.js +++ b/xlsx.js @@ -3213,16 +3213,19 @@ function evert_arr(obj) { return o; } -var basedate = new Date(1899, 11, 30, 0, 0, 0); // 2209161600000 +var basedate = new Date(); // 2209161600000 +basedate.setUTCFullYear(1899, 11, 30); +basedate.setUTCHours(0, 0, 0); + function datenum(v, date1904) { var epoch = v.getTime(); if(date1904) epoch -= 1462*24*60*60*1000; - var dnthresh = basedate.getTime() + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000; + var dnthresh = basedate.getTime() + v.getTimezoneOffset() * 60000; return (epoch - dnthresh) / (24 * 60 * 60 * 1000); } var refdate = new Date(); -var dnthresh = basedate.getTime() + (refdate.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000; var refoffset = refdate.getTimezoneOffset(); +var dnthresh = basedate.getTime() + refoffset * 60000; function numdate(v) { var out = new Date(); out.setTime(v * 24 * 60 * 60 * 1000 + dnthresh);