import {describe, it, expect} from 'vitest'; import {ZonedDateTime} from '@/'; describe('ZonedDateTime', () => { describe('#toString', () => { describe('Europe/Berlin', () => { it('prints iso string', () => { let date = new ZonedDateTime(Date.parse('2024-03-08T08:03:57.265Z'), 'Europe/Berlin'); expect(date.toString()).toEqual('2024-03-08T09:03:57.265+01:00[Europe/Berlin]'); expect(date.toString({timeZoneName: 'never'})).toEqual('2024-03-08T09:03:57.265+01:00'); expect(date.toString({offset: 'never'})).toEqual('2024-03-08T09:03:57.265[Europe/Berlin]'); expect(date.toString({offset: 'never', timeZoneName: 'never'})).toEqual('2024-03-08T09:03:57.265'); }); }); describe('Australia/Lord_Howe', () => { it('prints iso string', () => { let date = new ZonedDateTime(Date.UTC(2023, 8, 30, 15, 28, 4, 345), 'Australia/Lord_Howe'); expect(date.toString()).toEqual('2023-10-01T01:58:04.345+10:30[Australia/Lord_Howe]'); expect(date.toString({timeZoneName: 'never'})).toEqual('2023-10-01T01:58:04.345+10:30'); expect(date.toString({offset: 'never'})).toEqual('2023-10-01T01:58:04.345[Australia/Lord_Howe]'); expect(date.toString({offset: 'never', timeZoneName: 'never'})).toEqual('2023-10-01T01:58:04.345'); }); }); describe('America/New_York', () => { it('prints iso string', () => { let date = new ZonedDateTime(Date.UTC(2023, 8, 30, 15, 28, 4, 345), 'America/New_York'); expect(date.toString()).toEqual('2023-09-30T11:28:04.345-04:00[America/New_York]'); expect(date.toString({timeZoneName: 'never'})).toEqual('2023-09-30T11:28:04.345-04:00'); expect(date.toString({offset: 'never'})).toEqual('2023-09-30T11:28:04.345[America/New_York]'); expect(date.toString({offset: 'never', timeZoneName: 'never'})).toEqual('2023-09-30T11:28:04.345'); }); }); describe('Rounding', () => { it('changes timezone when rounding', () => { let date = new ZonedDateTime(Date.UTC(2024, 9, 27, 0, 59, 4, 345), 'Europe/Berlin'); expect(date.toString()).toEqual('2024-10-27T02:59:04.345+02:00[Europe/Berlin]'); expect(date.toString({smallestUnit: 'second', roundingMode: 'ceil'})).toEqual( '2024-10-27T02:59:05.000+02:00[Europe/Berlin]', ); expect(date.toString({smallestUnit: 'minute', roundingMode: 'ceil'})).toEqual( '2024-10-27T03:00:00.000+01:00[Europe/Berlin]', ); }); it('prints iso with smallest unit', () => { let date = new ZonedDateTime(Date.parse('2024-03-08T08:03:57.265Z'), 'Europe/Berlin'); expect(date.toString()).toEqual('2024-03-08T09:03:57.265+01:00[Europe/Berlin]'); expect(date.toString({smallestUnit: 'millisecond'})).toEqual('2024-03-08T09:03:57.265+01:00[Europe/Berlin]'); expect(date.toString({smallestUnit: 'second'})).toEqual('2024-03-08T09:03:57.000+01:00[Europe/Berlin]'); expect(date.toString({smallestUnit: 'minute'})).toEqual('2024-03-08T09:03:00.000+01:00[Europe/Berlin]'); }); }); }); });