[8.x] Allow modifiers in date format #34507
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.
This replaces the hasFormat test with a try-catch to systematically call createFormFormat and only fallback to parse if it fails.
Actually hasFormat supports all the replacements available in the DateTime::format method, but not special modifiers available in DateTime::createFormFormat, so using !, * or | is not properly supported.
This can either leads to error calling parse while the format could actually work with createFormFormat or silent error such as Y-d-m fallback to parse which will considered it as Y-m-d so month and day fall swapped.
Both catch and $date ?: are needed to support strict mode both enabled (Carbon throws exception on error) or disabled (simply returns false).
For the record: parse was added in the first place in 6.0 because createFormFormat was too strict when it comes to second/millisecond/microsecond precision or date with timezone, when given raw string is not always aligned with the format.