-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Description
Provide a general summary of the issue here
Valid ISO 8601 durations such as PT36H
can not be parsed using parseDuration
from @internationalized/date
because 36 falls outside of the internal range constraint.
🤔 Expected Behavior?
parseDuration("PT36H")
{
"years": 0,
"months": 0,
"weeks": 0,
"days": 0,
"hours": 36,
"minutes": 0,
"seconds": 0
}
😯 Current Behavior
parseDuration("PT36H")
Error: Invalid ISO 8601 Duration string: PT36H
💁 Possible Solution
These limits could be removed:
hours: parseDurationGroup(match.groups?.hours, isNegative, 0, 23), |
🔦 Context
This current behavior makes it difficult to use parseDuration
when you are working with time units only.
I can't tell exactly how the standard treats the issue, but it does seem that there is no general conversion between units. This makes sense to me, because P1DT12H
could represent a longer, shorter or equivalent length of time to PT36H
depending on the start date time (due to daylight savings). I believe most other ISO 8601 duration implementations preserve the distinction between P1DT12H
and PT36H
.
🖥️ Steps to Reproduce
import React from "react";
import { Provider, defaultTheme, Button } from "@adobe/react-spectrum";
import "./styles.css";
import { parseDuration } from "@internationalized/date";
export default function App() {
return (
<Provider theme={defaultTheme} height="100%">
<Button variant={"primary"} onClick={() => {
parseDuration("PT36H")
}}>Click Me</Button>
</Provider>
);
}
Version
3.32.0
What browsers are you seeing the problem on?
Firefox, Chrome, Safari, Microsoft Edge
If other, please specify.
No response
What operating system are you using?
Linux
🧢 Your Company/Team
No response
🕷 Tracking Issue
No response