Skip to content

getHoursInZonedDay

getHoursInZonedDay(value: string): number | null

Return the number of hours in the calendar day a zoned datetime falls on.

  • Accounts for DST transitions: a spring-forward day is 23 hours, a fall-back day is 25 hours, and a normal day is 24 hours. Zones whose DST shift isn’t a whole hour (e.g. Australia/Lord_Howe’s 30-minute shift) return a fractional value instead, such as 23.5 or 24.5.
  • The calculation is based on the local calendar day of the input, not the UTC instant, and uses Temporal’s hoursInDay: the span from that day’s startOfDay() to the next day’s. A day whose local midnight is skipped (e.g. America/Santiago on 2024-09-08, which starts at 01:00) is 23 hours.
  • The day is the input’s calendar date, so it can differ from the bucket startOfZoned(…, "day") returns where a fall-back re-enters the previous date: America/Goose_Bay at 2010-11-06T23:30:00-04:00 is in 6 November’s 24 hours here, and in a reopened 59-minute day for startOfZoned.
  • Returns null for invalid input.
ParameterTypeDescription
valuestringzoned ISO 8601 datetime string

number of hours in the day (usually 23, 24, or 25; fractional for non-whole-hour DST shifts), or null on invalid input

import { getHoursInZonedDay } from "@northguild/gmt/zoned/calculate";
getHoursInZonedDay("2024-03-10T12:00:00-04:00[America/New_York]") // 23
output 

zoned/calculate/getHoursInZonedDay.ts