Skip to content

Commit bb28936

Browse files
authored
fix CalendarDateTime add and subtract (#3316)
1 parent 2a6c48e commit bb28936

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

packages/@internationalized/date/src/manipulation.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* governing permissions and limitations under the License.
1111
*/
1212

13-
import {AnyCalendarDate, AnyTime, CycleOptions, CycleTimeOptions, DateDuration, DateField, DateFields, DateTimeDuration, Disambiguation, TimeDuration, TimeField, TimeFields} from './types';
13+
import {AnyCalendarDate, AnyDateTime, AnyTime, CycleOptions, CycleTimeOptions, DateDuration, DateField, DateFields, DateTimeDuration, Disambiguation, TimeDuration, TimeField, TimeFields} from './types';
1414
import {CalendarDate, CalendarDateTime, Time, ZonedDateTime} from './CalendarDate';
1515
import {epochFromDate, fromAbsolute, toAbsolute, toCalendar, toCalendarDateTime} from './conversion';
1616
import {GregorianCalendar} from './calendars/GregorianCalendar';
@@ -22,8 +22,8 @@ export function add(date: CalendarDateTime, duration: DateTimeDuration): Calenda
2222
export function add(date: CalendarDate, duration: DateDuration): CalendarDate;
2323
export function add(date: CalendarDate | CalendarDateTime, duration: DateTimeDuration): CalendarDate | CalendarDateTime;
2424
export function add(date: CalendarDate | CalendarDateTime, duration: DateTimeDuration) {
25-
let mutableDate: Mutable<AnyCalendarDate> = date.copy();
26-
let days = 'hour' in date ? addTimeFields(date, duration) : 0;
25+
let mutableDate: Mutable<AnyCalendarDate | AnyDateTime> = date.copy();
26+
let days = 'hour' in mutableDate ? addTimeFields(mutableDate, duration) : 0;
2727

2828
addYears(mutableDate, duration.years || 0);
2929
if (mutableDate.calendar.balanceYearMonth) {

packages/@internationalized/date/tests/manipulation.test.js

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* governing permissions and limitations under the License.
1111
*/
1212

13-
import {BuddhistCalendar, CalendarDate, CopticCalendar, EthiopicAmeteAlemCalendar, EthiopicCalendar, HebrewCalendar, IndianCalendar, IslamicCivilCalendar, IslamicTabularCalendar, IslamicUmalquraCalendar, JapaneseCalendar, PersianCalendar, TaiwanCalendar} from '..';
13+
import {BuddhistCalendar, CalendarDate, CalendarDateTime, CopticCalendar, EthiopicAmeteAlemCalendar, EthiopicCalendar, HebrewCalendar, IndianCalendar, IslamicCivilCalendar, IslamicTabularCalendar, IslamicUmalquraCalendar, JapaneseCalendar, PersianCalendar, TaiwanCalendar} from '..';
1414

1515
describe('CalendarDate manipulation', function () {
1616
describe('add', function () {
@@ -682,3 +682,31 @@ describe('CalendarDate manipulation', function () {
682682
});
683683
});
684684
});
685+
686+
describe('CalendarDateTime manipulation', function () {
687+
describe('add', function () {
688+
it.each`
689+
Unit | Expected
690+
${'hours'} | ${new CalendarDateTime(2020, 1, 1, 5, 0, 0, 0)}
691+
${'minutes'} | ${new CalendarDateTime(2020, 1, 1, 0, 5, 0, 0)}
692+
${'seconds'} | ${new CalendarDateTime(2020, 1, 1, 0, 0, 5, 0)}
693+
${'milliseconds'} | ${new CalendarDateTime(2020, 1, 1, 0, 0, 0, 5)}
694+
`('should add $Unit', ({Unit, Expected}) => {
695+
let date = new CalendarDateTime(2020, 1, 1, 0, 0, 0, 0);
696+
expect(date.add({[`${Unit}`]: 5})).toEqual(Expected);
697+
});
698+
});
699+
700+
describe('subtract', function () {
701+
it.each`
702+
Unit | Expected
703+
${'hours'} | ${new CalendarDateTime(2020, 1, 1, 0, 5, 5, 5)}
704+
${'minutes'} | ${new CalendarDateTime(2020, 1, 1, 5, 0, 5, 5)}
705+
${'seconds'} | ${new CalendarDateTime(2020, 1, 1, 5, 5, 0, 5)}
706+
${'milliseconds'} | ${new CalendarDateTime(2020, 1, 1, 5, 5, 5, 0)}
707+
`('should subtract $Unit', ({Unit, Expected}) => {
708+
let date = new CalendarDateTime(2020, 1, 1, 5, 5, 5, 5);
709+
expect(date.subtract({[`${Unit}`]: 5})).toEqual(Expected);
710+
});
711+
});
712+
});

0 commit comments

Comments
 (0)