Fix double to microseconds conversion in ext/date. #14357
Closed
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.
As mentioned by @kylekatarnls in #14332 (comment),
php_date_initialize_from_ts_double()
doesn't handle the fractional part of a double in the way users would expect.Also for example, 1.000_001 (1.000_000_99999999991773...) is transformed to @1.000000.
The updated code calculates the delta between the provided value and the next double value (in the case above, 1.000_001_00000000013978...), and if the delta is less than or equal to 0.5 microseconds, it uses the next value.
I think this solves the problem while keeping the original results on other cases.
CC: @marc-mabe