###### doxp30826

2014-06-01 09:29 阅读 32

# 用PHP计算Summer / Winter Solstice？

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?

• 点赞
• 写回答
• 关注问题
• 收藏
• 复制链接分享

#### 1条回答默认 最新

• 已采纳
duanke6249 2014-06-01 10:15

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 />";
}
``````
点赞 评论 复制链接分享