|
| 1 | +import MockDate from 'mockdate' |
| 2 | +import moment from 'moment-timezone' |
| 3 | +import dayjs from '../../src' |
| 4 | +import utc from '../../src/plugin/utc' |
| 5 | +import timezone from '../../src/plugin/timezone' |
| 6 | + |
| 7 | +dayjs.extend(utc) |
| 8 | +dayjs.extend(timezone) |
| 9 | + |
| 10 | +beforeEach(() => { |
| 11 | + MockDate.set(new Date()) |
| 12 | +}) |
| 13 | + |
| 14 | +afterEach(() => { |
| 15 | + MockDate.reset() |
| 16 | +}) |
| 17 | + |
| 18 | +const NY = 'America/New_York' |
| 19 | + |
| 20 | +describe('Guess', () => { |
| 21 | + it('return string', () => { |
| 22 | + expect(typeof dayjs.tz.guess()).toBe('string') |
| 23 | + }) |
| 24 | +}) |
| 25 | + |
| 26 | + |
| 27 | +describe('Parse', () => { |
| 28 | + it('parse target time string', () => { |
| 29 | + const newYork = dayjs.tz('2014-06-01 12:00', NY) |
| 30 | + const MnewYork = moment.tz('2014-06-01 12:00', NY) |
| 31 | + expect(newYork.format()).toBe('2014-06-01T12:00:00-04:00') |
| 32 | + expect(newYork.format()).toBe(MnewYork.format()) |
| 33 | + expect(newYork.utcOffset()).toBe(-240) |
| 34 | + expect(newYork.utcOffset()).toBe(MnewYork.utcOffset()) |
| 35 | + expect(newYork.valueOf()).toBe(1401638400000) |
| 36 | + expect(newYork.valueOf()).toBe(MnewYork.valueOf()) |
| 37 | + }) |
| 38 | + |
| 39 | + it('parse and convert between timezones', () => { |
| 40 | + const newYork = dayjs.tz('2014-06-01 12:00', NY) |
| 41 | + expect(newYork.tz('America/Los_Angeles').format()).toBe('2014-06-01T09:00:00-07:00') |
| 42 | + expect(newYork.tz('Europe/London').format()).toBe('2014-06-01T17:00:00+01:00') |
| 43 | + }) |
| 44 | +}) |
| 45 | + |
| 46 | +describe('Convert', () => { |
| 47 | + it('convert to target time', () => { |
| 48 | + const losAngeles = dayjs('2014-06-01T12:00:00Z').tz('America/Los_Angeles') |
| 49 | + const MlosAngeles = dayjs('2014-06-01T12:00:00Z').tz('America/Los_Angeles') |
| 50 | + expect(losAngeles.format()).toBe('2014-06-01T05:00:00-07:00') |
| 51 | + expect(losAngeles.format()).toBe(MlosAngeles.format()) |
| 52 | + expect(losAngeles.valueOf()).toBe(1401624000000) |
| 53 | + expect(losAngeles.valueOf()).toBe(MlosAngeles.valueOf()) |
| 54 | + expect(losAngeles.utcOffset()).toBe(-420) |
| 55 | + expect(losAngeles.utcOffset()).toBe(MlosAngeles.utcOffset()) |
| 56 | + }) |
| 57 | + |
| 58 | + it('convert to target time', () => { |
| 59 | + const losAngeles = dayjs('2014-06-01T12:00:00Z').tz('America/Los_Angeles') |
| 60 | + expect(losAngeles.format()).toBe('2014-06-01T05:00:00-07:00') |
| 61 | + expect(losAngeles.valueOf()).toBe(1401624000000) |
| 62 | + }) |
| 63 | + |
| 64 | + it('DST', () => { |
| 65 | + const jun = dayjs('2014-06-01T12:00:00Z') |
| 66 | + const dec = dayjs('2014-12-01T12:00:00Z') |
| 67 | + |
| 68 | + expect(jun.tz('America/Los_Angeles').format('ha')).toBe('5am') |
| 69 | + expect(dec.tz('America/Los_Angeles').format('ha')).toBe('4am') |
| 70 | + expect(jun.tz(NY).format('ha')).toBe('8am') |
| 71 | + expect(dec.tz(NY).format('ha')).toBe('7am') |
| 72 | + expect(jun.tz('Asia/Tokyo').format('ha')).toBe('9pm') |
| 73 | + expect(dec.tz('Asia/Tokyo').format('ha')).toBe('9pm') |
| 74 | + expect(jun.tz('Australia/Sydney').format('ha')).toBe('10pm') |
| 75 | + expect(dec.tz('Australia/Sydney').format('ha')).toBe('11pm') |
| 76 | + }) |
| 77 | +}) |
| 78 | + |
| 79 | + |
| 80 | +describe('DST, a time that never existed', () => { |
| 81 | + // 11 March 2012, 02:00:00 clocks were |
| 82 | + // turned forward 1 hour to 11 March 2012, 03:00:00 local |
| 83 | + // daylight time instead. |
| 84 | + // 02:00 -> 03:00 |
| 85 | + // 02:59 -> 03:59 |
| 86 | + |
| 87 | + it('2012-03-11 01:59:59', () => { |
| 88 | + const s = '2012-03-11 01:59:59' |
| 89 | + const d = dayjs.tz(s, NY) |
| 90 | + const m = moment.tz(s, NY) |
| 91 | + expect(d.format()).toBe('2012-03-11T01:59:59-05:00') |
| 92 | + expect(d.format()).toBe(m.format()) |
| 93 | + expect(d.utcOffset()).toBe(-300) |
| 94 | + expect(d.utcOffset()).toBe(m.utcOffset()) |
| 95 | + expect(d.valueOf()).toBe(1331449199000) |
| 96 | + expect(d.valueOf()).toBe(m.valueOf()) |
| 97 | + }) |
| 98 | + it('2012-03-11 02:00:00', () => { |
| 99 | + const s = '2012-03-11 02:00:00' |
| 100 | + const d = dayjs.tz(s, NY) |
| 101 | + const m = moment.tz(s, NY) |
| 102 | + expect(d.format()).toBe('2012-03-11T03:00:00-04:00') |
| 103 | + expect(d.format()).toBe(m.format()) |
| 104 | + expect(d.valueOf()).toBe(m.valueOf()) |
| 105 | + expect(d.valueOf()).toBe(1331449200000) |
| 106 | + expect(d.utcOffset()).toBe(-240) |
| 107 | + expect(d.utcOffset()).toBe(m.utcOffset()) |
| 108 | + }) |
| 109 | + it('2012-03-11 02:59:59', () => { |
| 110 | + const s = '2012-03-11 02:59:59' |
| 111 | + const d = dayjs.tz(s, NY) |
| 112 | + const m = moment.tz(s, NY) |
| 113 | + expect(d.format()).toBe('2012-03-11T03:59:59-04:00') |
| 114 | + expect(d.format()).toBe(m.format()) |
| 115 | + expect(d.valueOf()).toBe(m.valueOf()) |
| 116 | + expect(d.valueOf()).toBe(1331452799000) |
| 117 | + expect(d.utcOffset()).toBe(-240) |
| 118 | + expect(d.utcOffset()).toBe(m.utcOffset()) |
| 119 | + }) |
| 120 | + it('2012-03-11 03:00:00', () => { |
| 121 | + const s = '2012-03-11 03:00:00' |
| 122 | + const d = dayjs.tz(s, NY) |
| 123 | + const m = moment.tz(s, NY) |
| 124 | + expect(d.format()).toBe('2012-03-11T03:00:00-04:00') |
| 125 | + expect(d.format()).toBe(m.format()) |
| 126 | + expect(d.valueOf()).toBe(m.valueOf()) |
| 127 | + expect(d.valueOf()).toBe(1331449200000) |
| 128 | + expect(d.utcOffset()).toBe(-240) |
| 129 | + expect(d.utcOffset()).toBe(m.utcOffset()) |
| 130 | + }) |
| 131 | +}) |
0 commit comments