Add ChronosInterval class #495
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds a
ChronosIntervalclass that wrapsDateIntervalusing the decorator pattern, as suggested by @markstory in #444.Features
__toString()returns proper ISO 8601 format (e.g.,P1Y2M3DT4H5M6S)create(string $spec)- Create from ISO 8601 speccreateFromValues(...)- Create from individual componentsinstance(DateInterval $interval)- Wrap an existing DateIntervaltoNative()returns the underlyingDateIntervalfor compatibilitytotalSeconds()- Approximate total secondstotalDays()- Total days (exact if from diff())isNegative()- Check if interval is invertedisZero()- Check if interval has no durationy,m,d,h,i,s,f,invert,daysExample Usage
Discussion Points
This is a draft PR to gather feedback on the API design:
add(),sub())?ChronosIntervalbe returned fromChronos::diff()instead ofDateInterval?Related to #444
Test plan