Skip to content

Commit acc48c8

Browse files
longzhengLFDanLu
andauthored
Fix @internationalized/date addZoned not handling weeks duration (#4702)
* Fix addZoned not handling weeks * Add test * Refactor tests to manipulation --------- Co-authored-by: Daniel Lu <[email protected]>
1 parent 60e3002 commit acc48c8

File tree

2 files changed

+49
-2
lines changed

2 files changed

+49
-2
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,10 +364,11 @@ function cycleValue(value: number, amount: number, min: number, max: number, rou
364364

365365
export function addZoned(dateTime: ZonedDateTime, duration: DateTimeDuration): ZonedDateTime {
366366
let ms: number;
367-
if ((duration.years != null && duration.years !== 0) || (duration.months != null && duration.months !== 0) || (duration.days != null && duration.days !== 0)) {
367+
if ((duration.years != null && duration.years !== 0) || (duration.months != null && duration.months !== 0) || (duration.weeks != null && duration.weeks !== 0) || (duration.days != null && duration.days !== 0)) {
368368
let res = add(toCalendarDateTime(dateTime), {
369369
years: duration.years,
370370
months: duration.months,
371+
weeks: duration.weeks,
371372
days: duration.days
372373
});
373374

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

Lines changed: 47 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, CalendarDateTime, 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, ZonedDateTime} from '..';
1414

1515
describe('CalendarDate manipulation', function () {
1616
describe('add', function () {
@@ -687,6 +687,10 @@ describe('CalendarDateTime manipulation', function () {
687687
describe('add', function () {
688688
it.each`
689689
Unit | Expected
690+
${'years'} | ${new CalendarDateTime(2025, 1, 1, 0, 0, 0, 0)}
691+
${'months'} | ${new CalendarDateTime(2020, 6, 1, 0, 0, 0, 0)}
692+
${'weeks'} | ${new CalendarDateTime(2020, 2, 5, 0, 0, 0, 0)}
693+
${'days'} | ${new CalendarDateTime(2020, 1, 6, 0, 0, 0, 0)}
690694
${'hours'} | ${new CalendarDateTime(2020, 1, 1, 5, 0, 0, 0)}
691695
${'minutes'} | ${new CalendarDateTime(2020, 1, 1, 0, 5, 0, 0)}
692696
${'seconds'} | ${new CalendarDateTime(2020, 1, 1, 0, 0, 5, 0)}
@@ -700,6 +704,10 @@ describe('CalendarDateTime manipulation', function () {
700704
describe('subtract', function () {
701705
it.each`
702706
Unit | Expected
707+
${'years'} | ${new CalendarDateTime(2015, 1, 1, 5, 5, 5, 5)}
708+
${'months'} | ${new CalendarDateTime(2019, 8, 1, 5, 5, 5, 5)}
709+
${'weeks'} | ${new CalendarDateTime(2019, 11, 27, 5, 5, 5, 5)}
710+
${'days'} | ${new CalendarDateTime(2019, 12, 27, 5, 5, 5, 5)}
703711
${'hours'} | ${new CalendarDateTime(2020, 1, 1, 0, 5, 5, 5)}
704712
${'minutes'} | ${new CalendarDateTime(2020, 1, 1, 5, 0, 5, 5)}
705713
${'seconds'} | ${new CalendarDateTime(2020, 1, 1, 5, 5, 0, 5)}
@@ -710,3 +718,41 @@ describe('CalendarDateTime manipulation', function () {
710718
});
711719
});
712720
});
721+
722+
723+
describe('ZonedDateTime manipulation', function () {
724+
describe('add', function () {
725+
it.each`
726+
Unit | Expected
727+
${'years'} | ${new ZonedDateTime(2025, 1, 1, 'UTC', 0, 0, 0, 0, 0)}
728+
${'months'} | ${new ZonedDateTime(2020, 6, 1, 'UTC', 0, 0, 0, 0, 0)}
729+
${'weeks'} | ${new ZonedDateTime(2020, 2, 5, 'UTC', 0, 0, 0, 0, 0)}
730+
${'days'} | ${new ZonedDateTime(2020, 1, 6, 'UTC', 0, 0, 0, 0, 0)}
731+
${'hours'} | ${new ZonedDateTime(2020, 1, 1, 'UTC', 0, 5, 0, 0, 0)}
732+
${'minutes'} | ${new ZonedDateTime(2020, 1, 1, 'UTC', 0, 0, 5, 0, 0)}
733+
${'seconds'} | ${new ZonedDateTime(2020, 1, 1, 'UTC', 0, 0, 0, 5, 0)}
734+
${'milliseconds'} | ${new ZonedDateTime(2020, 1, 1, 'UTC', 0, 0, 0, 0, 5)}
735+
`('should add $Unit', ({Unit, Expected}) => {
736+
let date = new ZonedDateTime(2020, 1, 1, 'UTC', 0, 0, 0, 0, 0);
737+
expect(date.add({[`${Unit}`]: 5})).toEqual(Expected);
738+
});
739+
});
740+
741+
describe('subtract', function () {
742+
it.each`
743+
Unit | Expected
744+
${'years'} | ${new ZonedDateTime(2015, 1, 1, 'UTC', 0, 5, 5, 5, 5)}
745+
${'months'} | ${new ZonedDateTime(2019, 8, 1, 'UTC', 0, 5, 5, 5, 5)}
746+
${'weeks'} | ${new ZonedDateTime(2019, 11, 27, 'UTC', 0, 5, 5, 5, 5)}
747+
${'days'} | ${new ZonedDateTime(2019, 12, 27, 'UTC', 0, 5, 5, 5, 5)}
748+
${'hours'} | ${new ZonedDateTime(2020, 1, 1, 'UTC', 0, 0, 5, 5, 5)}
749+
${'hours'} | ${new ZonedDateTime(2020, 1, 1, 'UTC', 0, 0, 5, 5, 5)}
750+
${'minutes'} | ${new ZonedDateTime(2020, 1, 1, 'UTC', 0, 5, 0, 5, 5)}
751+
${'seconds'} | ${new ZonedDateTime(2020, 1, 1, 'UTC', 0, 5, 5, 0, 5)}
752+
${'milliseconds'} | ${new ZonedDateTime(2020, 1, 1, 'UTC', 0, 5, 5, 5, 0)}
753+
`('should subtract $Unit', ({Unit, Expected}) => {
754+
let date = new ZonedDateTime(2020, 1, 1, 'UTC', 0, 5, 5, 5, 5);
755+
expect(date.subtract({[`${Unit}`]: 5})).toEqual(Expected);
756+
});
757+
});
758+
});

0 commit comments

Comments
 (0)