DateInterval Ambiguity Warning #663
Merged
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.
What was changed
Added warning when Carbon and native
DateIntervalparse ISO 8601 duration strings differently.isIso8601DurationFormat()to validate ISO 8601 formatparse()to compare Carbon vs DateInterval results and emitE_USER_WARNINGon mismatchWhy?
Carbon interprets
P2Mas "2 minutes" while ISO 8601 standard defines it as "2 months", causing incorrect timer durations. Warning suggests usingnew \DateInterval()for standard ISO 8601 parsing or adding T separator to clarify intent (e.g.,PT2Mfor minutes).Checklist
added tests
DateInterval Ambiguity Warning
Added runtime detection for ISO 8601 duration strings where Carbon and native
DateIntervalproduce different parse results.The SDK internal duration parser uses Carbon's
CarbonInterval::fromString()which interpretsP2Mas "2 minutes", while PHP's nativeDateIntervalfollows ISO 8601 standard and parses it as "2 months". This discrepancy causes incorrect timer durations.When an ambiguous format is detected:
Resolution:
Warning is triggered only when:
Natural language formats (e.g., "2 days") are not validated against DateInterval and do not trigger warnings.