UNPKG

@burglekitt/gmt

Version:

Temporal-based date and time utilities with timezone support and polyfill integration

33 lines (32 loc) 1.22 kB
import { Temporal } from "@js-temporal/polyfill"; import { isValidDate } from "../validate/index.js"; /** * Return the first day of the quarter for a given ISO date. * * - Returns the first day (month and day set to 1) of the quarter containing the input date. * - Q1 returns "01-01", Q2 returns "04-01", Q3 returns "07-01", Q4 returns "10-01". * - Validates input using isValidDate. * * @param value ISO PlainDate string * @returns ISO PlainDate string for the first day of the quarter, or "" on invalid input * * @example startOfQuarterForDate("2024-03-15") // "2024-01-01" * @example startOfQuarterForDate("2024-06-15") // "2024-04-01" * @example startOfQuarterForDate("2024-09-15") // "2024-07-01" * @example startOfQuarterForDate("2024-12-15") // "2024-10-01" * @example startOfQuarterForDate("invalid") // "" */ export function startOfQuarterForDate(value) { if (!isValidDate(value)) { return ""; } try { const date = Temporal.PlainDate.from(value); const month = date.month; const quarterStartMonth = Math.floor((month - 1) / 3) * 3 + 1; return date.with({ month: quarterStartMonth, day: 1 }).toString(); } catch { return ""; } }