From 65de9c6d24d9f36f8b8213a2b8a15a324d132907 Mon Sep 17 00:00:00 2001 From: Cynthia Date: Wed, 19 Feb 2025 14:02:26 +0100 Subject: [PATCH 1/2] feat(internationalized/date): add `durationToString` function to stringify durations as ISO 8061 strings Additionally, this commit makes `parseDuration` accept decimal values for all time scale components rather than just ones after the time designator. This is consistent with the ISO 8601-1:2019 specification and should improve interoperability. --- packages/@internationalized/date/src/index.ts | 3 +- .../@internationalized/date/src/string.ts | 110 +++++++++++- .../date/tests/string.test.js | 167 +++++++++++++++--- 3 files changed, 246 insertions(+), 34 deletions(-) diff --git a/packages/@internationalized/date/src/index.ts b/packages/@internationalized/date/src/index.ts index 9fed618bc02..248470c3496 100644 --- a/packages/@internationalized/date/src/index.ts +++ b/packages/@internationalized/date/src/index.ts @@ -83,6 +83,7 @@ export { parseAbsolute, parseAbsoluteToLocal, parseZonedDateTime, - parseDuration + parseDuration, + durationToString } from './string'; export {DateFormatter} from './DateFormatter'; diff --git a/packages/@internationalized/date/src/string.ts b/packages/@internationalized/date/src/string.ts index 04a7d3d8b40..804ff7d4798 100644 --- a/packages/@internationalized/date/src/string.ts +++ b/packages/@internationalized/date/src/string.ts @@ -23,7 +23,7 @@ const DATE_TIME_RE = /^([+-]\d{6}|\d{4})-(\d{2})-(\d{2})(?:T(\d{2}))?(?::(\d{2}) const ZONED_DATE_TIME_RE = /^([+-]\d{6}|\d{4})-(\d{2})-(\d{2})(?:T(\d{2}))?(?::(\d{2}))?(?::(\d{2}))?(\.\d+)?(?:([+-]\d{2})(?::?(\d{2}))?)?\[(.*?)\]$/; const ABSOLUTE_RE = /^([+-]\d{6}|\d{4})-(\d{2})-(\d{2})(?:T(\d{2}))?(?::(\d{2}))?(?::(\d{2}))?(\.\d+)?(?:(?:([+-]\d{2})(?::?(\d{2}))?)|Z)$/; const DATE_TIME_DURATION_RE = - /^((?-)|\+)?P((?\d*)Y)?((?\d*)M)?((?\d*)W)?((?\d*)D)?((?