Doc #78267 [Ver->Csd]: Change in sun times result with PHP version change
[email protected] Thu, 02 Jun 2022 16:10:07 +0000
| Newsgroups | php.doc.bugs |
|---|---|
| Message-ID | <[email protected]> |
Edit report at https://bugs.php.net/bug.php?id=78267&edit=1 ID: 78267 Updated by: [email protected] Reported by: stefano dot borghi at gmx dot com Summary: Change in sun times result with PHP version change -Status: Verified +Status: Closed Type: Documentation Problem Package: Date/time related PHP Version: 7.2.20 Block user comment: N Private report: N New Comment: Automatic comment on behalf of derickr Revision: https://github.com/php/doc-en/commit/d9ae294a02fa49a5d063dbcde2ca1f7e7a770c80 Log: Fixed bug #78267: Change in sun times result with PHP version change Previous Comments: ------------------------------------------------------------------------ [2020-01-09 13:29:56] contact at frank-liepert dot de It seems like PHP 7.2 has fixed another issue when dealing with different timezones. Test script: ------------ <?php $longitude = 12.7645; $latitude = 48.9825; date_default_timezone_set('America/New_York'); $dateTime = new DateTime('2019-07-08'); $sunrise = date_sunrise($dateTime->getTimestamp(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90 + 5 / 6); var_dump($sunrise); date_default_timezone_set('UTC'); $dateTime = new DateTime('2019-07-08'); $sunrise = date_sunrise($dateTime->getTimestamp(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90 + 5 / 6); var_dump($sunrise); date_default_timezone_set('Australia/Brisbane'); $dateTime = new DateTime('2019-07-08'); $sunrise = date_sunrise($dateTime->getTimestamp(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90 + 5 / 6); var_dump($sunrise); Output for 7.2.0 - 7.4.1 ------------------------ int(1562555526) int(1562555526) int(1562555526) Output for 5.3.0 - 7.1.33 ------------------------ int(1562555561) int(1562555552) int(1562555531) ------------------------------------------------------------------------ [2019-07-13 15:33:29] [email protected] This[1] has basically been a bug fix, since formerly the time to calculate the Julian Day count has been adjusted to noon, albeit the JD calculation already catered to that, which caused the calculation to be half a day off. For instance, in your example the time was actually calculated for 2018-03-14.5 (i.e. a hypothetical day between the 14th and 15th). Now the time is properly adjusted to midnight. [1] <https://github.com/php/php-src/commit/a063d55395c818c401b7efdf6b42b4728ce3df08> ------------------------------------------------------------------------ [2019-07-09 19:34:57] stefano dot borghi at gmx dot com Description: ------------ In PHP >= v7.2 the result of the `date_sun_info` function, and similarly the other sun related functions, return a different value for sunrise and sunset compared to the previous PHP versions. I'm not sure if this is an expected change due to a correction of a previously wrong result or if it's an actual bug. In any case this change is not reported in the documentation. Test script: --------------- // see https://3v4l.org/31aER function sunTimes($lat, $long, $date) { date_default_timezone_set('UTC'); $sun_info = date_sun_info(strtotime($date), $lat, $long); $sunrise = date("H:i:s", $sun_info['sunrise']); $sunset = date("H:i:s", $sun_info['sunset']); return "on $date sun rises at $sunrise and sets at $sunset"; } echo sunTimes(51.5, 0, '2018-03-14'); // ~London Expected result: ---------------- // PHP <= v7.1.0 'on 2018-03-14 sun rises at 06:14:51 and sets at 18:03:16' Actual result: -------------- // PHP >= v7.2.4 'on 2018-03-14 sun rises at 06:15:59 and sets at 18:02:24' ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=78267&edit=1