All checks were successful
Build and Push LST Docker Image / docker (push) Successful in 4m26s
45 lines
1.1 KiB
TypeScript
45 lines
1.1 KiB
TypeScript
import { getJsDateFromExcel } from "excel-date-to-js";
|
|
|
|
export const excelDateStuff = (
|
|
serial: number,
|
|
defaultTime = 800,
|
|
time?: number,
|
|
) => {
|
|
if (typeof serial !== "number" || serial <= 0) {
|
|
return "invalid Date";
|
|
}
|
|
|
|
// Get base date from Excel serial (this gives you UTC midnight)
|
|
const excelTime = excelSerialToTime(serial);
|
|
const finalTime = time ?? excelTime ?? defaultTime;
|
|
|
|
const date = getJsDateFromExcel(Math.floor(serial));
|
|
|
|
const localOffset = new Date().getTimezoneOffset() / 60;
|
|
const hours = Math.floor(finalTime / 100);
|
|
const minutes = finalTime % 100;
|
|
|
|
// Set the time in UTC
|
|
date.setUTCHours(hours + localOffset);
|
|
date.setUTCMinutes(minutes);
|
|
date.setUTCSeconds(0);
|
|
date.setUTCMilliseconds(0);
|
|
|
|
//console.log(date.toISOString(), serial, time);
|
|
return date.toISOString();
|
|
};
|
|
|
|
const excelSerialToTime = (serial: number): number | null => {
|
|
const fraction = serial % 1;
|
|
|
|
if (fraction <= 0) {
|
|
return null;
|
|
}
|
|
|
|
const totalMinutes = Math.round(fraction * 24 * 60);
|
|
const hours = Math.floor(totalMinutes / 60);
|
|
const minutes = totalMinutes % 60;
|
|
|
|
return hours * 100 + minutes;
|
|
};
|