lifetracker/packages/shared/utils/days.ts

50 lines
1.6 KiB
TypeScript

import { format, addHours } from "date-fns";
import { TZDate } from "@date-fns/tz";
import { UTCDate, utc } from "@date-fns/utc";
import spacetime from "spacetime";
export function dateFromInput(input: { dateQuery: string, timezone: string }) {
let t: string;
try {
t = format(new UTCDate(input.dateQuery), "yyyy-MM-dd", { in: utc });
}
catch (e) {
const now_here = spacetime.now(input.timezone);
switch (input.dateQuery) {
case "today":
t = now_here.format("yyyy-MM-dd");
break;
case "yesterday":
t = now_here.subtract(1, "day").format("yyyy-MM-dd");
break;
case "tomorrow":
t = now_here.add(1, "day").format("yyyy-MM-dd");
break;
default:
throw new Error("Invalid dateQuery");
}
}
// console.log(`dateFromInput(${input.dateQuery}, ${input.timezone}) = ${t}`);
return t;
}
function generateHour(d, t) {
const dt: TZDate = addHours(d, t);
console.log(dt);
return {
date: format(dt, 'yyyy-MM-dd'),
time: parseInt(format(dt, 'H')),
};
}
export function hoursListInUTC(input: { dateQuery: string, timezone: string }) {
const localMidnight = spacetime(input.dateQuery, input.timezone).startOf("day");
return Array.from({ length: 24 }).map((_, i) => {
const utcTime = localMidnight.goto("UTC").add(i, "hours");
return {
time: utcTime.hour(),
date: utcTime.format("iso-short"),
};
});
}