diff --git a/src/addDays.ts b/src/addDays.ts index bc2aa57..facfb08 100644 --- a/src/addDays.ts +++ b/src/addDays.ts @@ -16,7 +16,7 @@ export function addDays(dateObj: Date, days: number, timeZone?: TimeZone | strin const d = new Date(dateObj.getTime()); // Handle UTC calculation - if (isUTC(timeZone)) { + if (isUTC(zoneName)) { d.setUTCDate(d.getUTCDate() + days); return d; } diff --git a/src/addMonths.ts b/src/addMonths.ts index b50610f..29bca1c 100644 --- a/src/addMonths.ts +++ b/src/addMonths.ts @@ -16,7 +16,7 @@ export function addMonths(dateObj: Date, months: number, timeZone?: TimeZone | s const d = new Date(dateObj.getTime()); // Handle UTC calculation - if (isUTC(timeZone)) { + if (isUTC(zoneName)) { d.setUTCMonth(d.getUTCMonth() + months); // Adjust to last day of month if new month has fewer days if (d.getUTCDate() < dateObj.getUTCDate()) { diff --git a/tests/addDays.spec.ts b/tests/addDays.spec.ts index fae9bc5..49bb138 100644 --- a/tests/addDays.spec.ts +++ b/tests/addDays.spec.ts @@ -112,7 +112,14 @@ describe('Local Time', () => { }); describe('UTC Time', () => { - beforeAll(() => (process.env.TZ = 'Asia/Tokyo')); + beforeAll(() => (process.env.TZ = 'America/Los_Angeles')); + + test('UTC timezone object across the daylight-saving transition', () => { + const date1 = new Date(Date.UTC(2024, 2, 9, 12)); + const date2 = new Date(Date.UTC(2024, 2, 10, 12)); + + expect(addDays(date1, 1, { zone_name: 'UTC', gmt_offset: [0] })).toEqual(date2); + }); test('One day after 2:00 AM on January 31, 2024', () => { const date1 = new Date(Date.UTC(2024, 0, 31, 10)); diff --git a/tests/addMonths.spec.ts b/tests/addMonths.spec.ts index f492d68..7bc6198 100644 --- a/tests/addMonths.spec.ts +++ b/tests/addMonths.spec.ts @@ -112,7 +112,14 @@ describe('Local Time', () => { }); describe('UTC Time', () => { - beforeAll(() => (process.env.TZ = 'Asia/Tokyo')); + beforeAll(() => (process.env.TZ = 'America/Los_Angeles')); + + test('UTC timezone object at the end of January', () => { + const date1 = new Date(Date.UTC(2025, 0, 31, 0, 30)); + const date2 = new Date(Date.UTC(2025, 1, 28, 0, 30)); + + expect(addMonths(date1, 1, { zone_name: 'UTC', gmt_offset: [0] })).toEqual(date2); + }); test('One month after 2:00 AM on January 31, 2024', () => { const date1 = new Date(Date.UTC(2024, 0, 31, 10)); diff --git a/tests/addYears.spec.ts b/tests/addYears.spec.ts index df07bcc..84868c2 100644 --- a/tests/addYears.spec.ts +++ b/tests/addYears.spec.ts @@ -112,7 +112,14 @@ describe('Local Time', () => { }); describe('UTC Time', () => { - beforeAll(() => (process.env.TZ = 'Asia/Tokyo')); + beforeAll(() => (process.env.TZ = 'America/Los_Angeles')); + + test('UTC timezone object when clamping a leap day', () => { + const date1 = new Date(Date.UTC(2024, 1, 29, 0, 30)); + const date2 = new Date(Date.UTC(2025, 1, 28, 0, 30)); + + expect(addYears(date1, 1, { zone_name: 'UTC', gmt_offset: [0] })).toEqual(date2); + }); test('One year after 2:00 AM on January 31, 2024', () => { const date1 = new Date(Date.UTC(2024, 0, 31, 10));