@@ -704,13 +704,15 @@ const calculateDurationMinutes = (startTime, endTime) => {
704704 if ( ! startTime || ! endTime ) return 0
705705
706706 // If it looks like just a time (contains no date), prefix with dummy date
707- const startDatetime = startTime . includes ( 'T' ) || startTime . includes ( '-' )
708- ? startTime
709- : `2000-01-01T${ startTime } `
710-
711- const endDatetime = endTime . includes ( 'T' ) || endTime . includes ( '-' )
712- ? endTime
713- : `2000-01-01T${ endTime } `
707+ const startDatetime =
708+ startTime . includes ( 'T' ) || startTime . includes ( '-' )
709+ ? startTime
710+ : `2000-01-01T${ startTime } `
711+
712+ const endDatetime =
713+ endTime . includes ( 'T' ) || endTime . includes ( '-' )
714+ ? endTime
715+ : `2000-01-01T${ endTime } `
714716
715717 const start = dayjs ( startDatetime )
716718 const end = dayjs ( endDatetime )
@@ -790,6 +792,34 @@ const remove = (dateInput, amount, unit) => {
790792 return add ( dateInput , - amount , unit )
791793}
792794
795+ /**
796+ * Get the season name and year for a given date
797+ *
798+ * @param {string } dateInput - ISO date string
799+ * @returns {string } Season and year, e.g. 'winter 2025', 'summer 2026'
800+ * @example
801+ * toSeason('2025-12-01') // 'winter 2025'
802+ * toSeason('2026-06-15') // 'summer 2026'
803+ */
804+ const toSeason = ( dateInput ) => {
805+ if ( ! dateInput ) return ''
806+
807+ const date = dayjs ( dateInput )
808+ if ( ! date . isValid ( ) ) return ''
809+
810+ // dayjs month() is 0-based, convert to 1-based
811+ const month = date . month ( ) + 1
812+ const year = date . year ( )
813+
814+ let season
815+ if ( month >= 3 && month <= 5 ) season = 'spring'
816+ else if ( month >= 6 && month <= 8 ) season = 'summer'
817+ else if ( month >= 9 && month <= 11 ) season = 'autumn'
818+ else season = 'winter'
819+
820+ return `${ season } ${ year } `
821+ }
822+
793823module . exports = {
794824 arrayOrObjectToDateObject,
795825 monthYearToDateObject,
@@ -818,7 +848,8 @@ module.exports = {
818848 isWithinDayRange,
819849 calculateDurationMinutes,
820850 add,
821- remove
851+ remove,
852+ toSeason
822853}
823854
824855/**
0 commit comments