Search code examples
phpdatetimetimeastronomy

Calculating Summer/Winter Solstice in PHP?


PHP allows me to quickly check the sunrise and sunset times for any day at a specific Latitude & Longitude.

Is there a simple way to calculate which day is the Solstice? By which I mean - at my specific location, which day has the most hours of sunlight and which has the least?


Solution

  • I wouldn't call it "simple", but I thought about calculating the time differences between the sunrise and sunset in each day, then storing this data in an array, and finally finding the min/max value. Iv'e made something really quick, hope it would be useful:

    (I used random long/lat)

    function solstice() {
    
        // Set timezone
        date_default_timezone_set('UTC');
        $date='2014/01/01';
    
        $end_date='2014/12/31';
        $i = 0;
        //loop through the year
        while(strtotime($date)<=strtotime($end_date)) { 
            $sunrise=date_sunrise(strtotime($date),SUNFUNCS_RET_DOUBLE,31.47,35.13,90,3);
            $sunset=date_sunset(strtotime($date),SUNFUNCS_RET_DOUBLE,31.47,35.13,90,3);
            //calculate time difference
            $delta = $sunset-$sunrise;
            //store the time difference
            $delta_array[$i] = $delta;
            //store the date
            $dates_array[$i] = $date;
            $i++;
            //next day
            $date=date("Y-m-d",strtotime("+1 day",strtotime($date)));
        }
    
        $shortest_key = array_search(min($delta_array), $delta_array);
        $longest_key = array_search(max($delta_array), $delta_array);
    
        echo "The longest day is:".$dates_array[$longest_key]. "<br />";
        echo "The shortest day is:".$dates_array[$shortest_key]. "<br />";
    }