|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2010-10-25 03:44 UTC] sec at mboca dot com
Description: ------------ when you try to get sunrise and sunset times from the area that have GMT +12 or over. the sunrise and sunset times will be listed for next day. The sunrise and sunset times should be listed for today. http://weatherpixel.com/bug.php the source code is at http://weatherpixel.com/bug.php?src=show one of the examples that the Fiji Island times would only show for tomorrow and my script would show it as night as always. http://weatherpixel.com/sunrise_gmt.php?station=NFFN Here is my configure line for linux: ./configure --enable-sockets --enable-calendar --with-curl=/usr/lib/ --with-gd --with-jpeg-dir=/usr/local/lib --with-png-dir=/usr/local/lib --with-ttf --enable-gd-native-ttf --with-gettext --with-freetype-dir=/usr/local/lib --without-sqlite --without-pdo-sqlite --with-apxs2=/usr/local/apache2/bin/apxs Test script: --------------- here is php script that reproduce the date_sunrise http://weatherpixel.com/bug.php?src=show Expected result: ---------------- the times for +12 GMT and more than +12 GMT will always show tomorrow's sunrise and sunset times. PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Dec 06 00:00:02 2025 UTC |
I figured out a workaround to this bug. you have to add -1 day to subtract one day from sunrise and sunset times. if ($offset >= 12 && strcmp(date_default_timezone_get(), "Pacific/Tarawa") != 0) { echo "+12 GMT workaround done<br>"; $sunrise = strtotime('-1 day', $sunrise); $sunset = strtotime('-1 day', $sunset); $csunrise = strtotime('-1 day', $csunrise); $csunset = strtotime('-1 day', $csunset); $nsunrise = strtotime('-1 day', $nsunrise); $nsunset = strtotime('-1 day', $nsunset); $asunrise = strtotime('-1 day', $asunrise); $asunset = strtotime('-1 day', $asunset); } I need to test on time zones that are -12 in offsets might have to do +1 day on that offset.The same problem happens on PHP7.3 A snippet of code that shows the issue could be: <?php $dateTime = new DateTime('2013-10-01T10:35:00.000+13:00'); $timestamp = $dateTime->getTimestamp(); $sunInfo = date_sun_info($timestamp, -37.6908, 177.25); $sunInfo_2 = date_sun_info($timestamp, -37.6908, 177.50); echo $timestamp."<br>"; echo "Sunrise for longitude 177.25: ".$sunInfo['sunrise']."<br>"; echo "Sunrise for longitude 177.50: ".$sunInfo_2['sunrise']."<br>"; ?> which outputs: 1380576900 Sunrise for longitude 177.25: 1380476829 Sunrise for longitude 177.50: 1380563169 The sunrise for long 177.25, when transformed a readable value is: GMT: Sunday, September 29, 2013 5:47:09 PM Your time zone: Monday, September 30, 2013 6:47:09 AM GMT+13:00 DST The sunrise for long 177.50, becomes: GMT: Monday, September 30, 2013 5:46:09 PM Your time zone: Tuesday, October 1, 2013 6:46:09 AM GMT+13:00 DST As you can notice, the seed timestamp for both is the same, the only difference is the longitude value. But we still get results for the next day. This was reproduced using the latest PHP7.3 docker image (using alpine linux), also can be reproduced copying the provided code on http://phpfiddle.org/ (I don't know what environment they use). This also happened on our old PHP5.6 servers using CentOS so it looks like is not OS/PHP version dependent, but an actual bug on the code. Shall the behaviour exposed were intended, I would appreciate some sort of explanation regarding the why is expected.