<?php
function getSunPosition($lat, $long, $year, $month, $day, $hour, $min) {
// From http://stackoverflow.com/questions/8708048/position-of-the-sun-given-time-of-day-latitude-and-longitude?rq=1
// Get Julian date for date at noon
//correct for half-day offset
$dayfrac = $hour / 24 - .5;
echo('$dayfrac = '); var_dump($dayfrac);
//now set the fraction of a day
$frac = $dayfrac + $min / 60 / 24;
$jd = $jd + $frac;
// The input to the Atronomer's almanach is the difference between
// the Julian date and JD 2451545.0 (noon, 1 January 2000)
$time = ($jd - 2451545);
// Ecliptic coordinates
// Mean longitude
$mnlong = (280.460 + 0.9856474 * $time);
$mnlong = fmod($mnlong,360); if ($mnlong < 0) $mnlong = ($mnlong + 360);
// Mean anomaly
$mnanom = (357.528 + 0.9856003 * $time);
$mnanom = fmod($mnanom,360); if ($mnanom < 0) $mnanom = ($mnanom + 360);
// Ecliptic longitude and obliquity of ecliptic
$eclong = ($mnlong + 1.915 * sin($mnanom) + 0.020 * sin(2 * $mnanom)); $eclong = fmod($eclong,360); if ($eclong < 0) $eclong = ($eclong + 360);
$oblqec = (23.439 - 0.0000004 * $time);
// Celestial coordinates
// Right ascension and declination
$num = (cos($oblqec) * sin($eclong)); $ra = (atan($num / $den)); if ($den < 0) $ra = ($ra + pi()); if ($den >= 0 && $num <0) $ra = ($ra + 2*pi());
// Local coordinates
// Greenwich mean sidereal time
//$h = $hour + $min / 60 + $sec / 3600;
$h = $hour + $min / 60;
$gmst = (6.697375 + .0657098242 * $time + $h);
if ($gmst < 0) $gmst = ($gmst + 24);
// Local mean sidereal time
$lmst = ($gmst + $long / 15);
if ($lmst < 0) $lmst = ($lmst + 24);
// Hour angle
$ha = ($lmst - $ra);
if ($ha < pi()) $ha = ($ha + 2*pi()); if ($ha > pi()) $ha = ($ha - 2*pi());
// Latitude to radians
// Azimuth and elevation
// For logic and names, see Spencer, J.W. 1989. Solar Energy. 42(4):353
if ((sin($dec) - sin($el) * sin($lat)) >00) { if(sin($az) < 0) $az = ($az + 2*pi()); } else {
}
}
var_dump(getSunPosition
(-4.77867, 11.86364, 2013, 9, 1, 10, 0, 0));
// your code goes here
PD9waHAKZnVuY3Rpb24gZ2V0U3VuUG9zaXRpb24oJGxhdCwgJGxvbmcsICR5ZWFyLCAkbW9udGgsICRkYXksICRob3VyLCAkbWluKSB7CiAgLy8gRnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzg3MDgwNDgvcG9zaXRpb24tb2YtdGhlLXN1bi1naXZlbi10aW1lLW9mLWRheS1sYXRpdHVkZS1hbmQtbG9uZ2l0dWRlP3JxPTEKCiAgLy8gR2V0IEp1bGlhbiBkYXRlIGZvciBkYXRlIGF0IG5vb24KICAkamQgPSBncmVnb3JpYW50b2pkKCRtb250aCwkZGF5LCR5ZWFyKTsKICBlY2hvKCckamQgPSAnKTsgdmFyX2R1bXAoJGpkKTsKCiAgLy9jb3JyZWN0IGZvciBoYWxmLWRheSBvZmZzZXQKICAkZGF5ZnJhYyA9ICRob3VyIC8gMjQgLSAuNTsKICBlY2hvKCckZGF5ZnJhYyA9ICcpOyB2YXJfZHVtcCgkZGF5ZnJhYyk7CgogIC8vbm93IHNldCB0aGUgZnJhY3Rpb24gb2YgYSBkYXkgICAgICAKICAkZnJhYyA9ICRkYXlmcmFjICsgJG1pbiAvIDYwIC8gMjQ7CiAgZWNobygnJGZyYWMgPSAnKTsgdmFyX2R1bXAoJGZyYWMpOwogICRqZCA9ICRqZCArICRmcmFjOwogIGVjaG8oJyRqZCA9ICcpOyB2YXJfZHVtcCgkamQpOwoKICAvLyBUaGUgaW5wdXQgdG8gdGhlIEF0cm9ub21lcidzIGFsbWFuYWNoIGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KICAvLyB0aGUgSnVsaWFuIGRhdGUgYW5kIEpEIDI0NTE1NDUuMCAobm9vbiwgMSBKYW51YXJ5IDIwMDApCiAgJHRpbWUgPSAoJGpkIC0gMjQ1MTU0NSk7CiAgZWNobygnJHRpbWUgPSAnKTsgdmFyX2R1bXAoJHRpbWUpOwogIC8vIEVjbGlwdGljIGNvb3JkaW5hdGVzCgogIC8vIE1lYW4gbG9uZ2l0dWRlCiAgJG1ubG9uZyA9ICgyODAuNDYwICsgMC45ODU2NDc0ICogJHRpbWUpOwogIGVjaG8oJyRtbmxvbmcgPSAnKTsgdmFyX2R1bXAoJG1ubG9uZyk7CiAgJG1ubG9uZyA9IGZtb2QoJG1ubG9uZywzNjApOyAgICAgIAogIGVjaG8oJyRtbmxvbmcgPSAnKTsgdmFyX2R1bXAoJG1ubG9uZyk7CiAgaWYgKCRtbmxvbmcgPCAwKSAkbW5sb25nID0gKCRtbmxvbmcgKyAzNjApOwogIGVjaG8oJyRtbmxvbmcgPSAnKTsgdmFyX2R1bXAoJG1ubG9uZyk7CgogIC8vIE1lYW4gYW5vbWFseQogICRtbmFub20gPSAoMzU3LjUyOCArIDAuOTg1NjAwMyAqICR0aW1lKTsKICBlY2hvKCckbW5hbm9tID0gJyk7IHZhcl9kdW1wKCRtbmFub20pOwogICRtbmFub20gPSBmbW9kKCRtbmFub20sMzYwKTsKICBlY2hvKCckbW5hbm9tID0gJyk7IHZhcl9kdW1wKCRtbmFub20pOwogIGlmICgkbW5hbm9tIDwgMCkgJG1uYW5vbSA9ICgkbW5hbm9tICsgMzYwKTsKICBlY2hvKCckbW5hbm9tID0gJyk7IHZhcl9kdW1wKCRtbmFub20pOwogICRtbmFub20gPSBkZWcycmFkKCRtbmFub20pOwogIGVjaG8oJyRtbmFub20gPSAnKTsgdmFyX2R1bXAoJG1uYW5vbSk7CgogIC8vIEVjbGlwdGljIGxvbmdpdHVkZSBhbmQgb2JsaXF1aXR5IG9mIGVjbGlwdGljCiAgJGVjbG9uZyA9ICgkbW5sb25nICsgMS45MTUgKiBzaW4oJG1uYW5vbSkgKyAwLjAyMCAqIHNpbigyICogJG1uYW5vbSkpOwogIGVjaG8oJyRlY2xvbmcgPSAnKTsgdmFyX2R1bXAoJGVjbG9uZyk7CiAgJGVjbG9uZyA9IGZtb2QoJGVjbG9uZywzNjApOwogIGVjaG8oJyRlY2xvbmcgPSAnKTsgdmFyX2R1bXAoJGVjbG9uZyk7CiAgaWYgKCRlY2xvbmcgPCAwKSAkZWNsb25nID0gKCRlY2xvbmcgKyAzNjApOwogIGVjaG8oJyRlY2xvbmcgPSAnKTsgdmFyX2R1bXAoJGVjbG9uZyk7CiAgJG9ibHFlYyA9ICgyMy40MzkgLSAwLjAwMDAwMDQgKiAkdGltZSk7CiAgZWNobygnJG9ibHFlYyA9ICcpOyB2YXJfZHVtcCgkb2JscWVjKTsKICAkZWNsb25nID0gZGVnMnJhZCgkZWNsb25nKTsKICBlY2hvKCckZWNsb25nID0gJyk7IHZhcl9kdW1wKCRlY2xvbmcpOwogICRvYmxxZWMgPSBkZWcycmFkKCRvYmxxZWMpOwogIGVjaG8oJyRvYmxxZWMgPSAnKTsgdmFyX2R1bXAoJG9ibHFlYyk7CgogIC8vIENlbGVzdGlhbCBjb29yZGluYXRlcwogIC8vIFJpZ2h0IGFzY2Vuc2lvbiBhbmQgZGVjbGluYXRpb24KICAkbnVtID0gKGNvcygkb2JscWVjKSAqIHNpbigkZWNsb25nKSk7CiAgZWNobygnJG51bSA9ICcpOyB2YXJfZHVtcCgkbnVtKTsKICAkZGVuID0gKGNvcygkZWNsb25nKSk7CiAgZWNobygnJGRlbiA9ICcpOyB2YXJfZHVtcCgkZGVuKTsKICAkcmEgPSAoYXRhbigkbnVtIC8gJGRlbikpOwogIGVjaG8oJyRyYSA9ICcpOyB2YXJfZHVtcCgkcmEpOwogIGlmICgkZGVuIDwgMCkgJHJhID0gKCRyYSArIHBpKCkpOwogIGVjaG8oJyRyYSA9ICcpOyB2YXJfZHVtcCgkcmEpOwogIGlmICgkZGVuID49IDAgJiYgJG51bSA8MCkgJHJhID0gKCRyYSArIDIqcGkoKSk7CiAgZWNobygnJHJhID0gJyk7IHZhcl9kdW1wKCRyYSk7CiAgJGRlYyA9IChhc2luKHNpbigkb2JscWVjKSAqIHNpbigkZWNsb25nKSkpOwogIGVjaG8oJyRkZWMgPSAnKTsgdmFyX2R1bXAoJGRlYyk7CgogIC8vIExvY2FsIGNvb3JkaW5hdGVzCiAgLy8gR3JlZW53aWNoIG1lYW4gc2lkZXJlYWwgdGltZQogIC8vJGggPSAkaG91ciArICRtaW4gLyA2MCArICRzZWMgLyAzNjAwOwogICRoID0gJGhvdXIgKyAkbWluIC8gNjA7CiAgZWNobygnJGggPSAnKTsgdmFyX2R1bXAoJGgpOwogICRnbXN0ID0gKDYuNjk3Mzc1ICsgLjA2NTcwOTgyNDIgKiAkdGltZSArICRoKTsKICBlY2hvKCckZ21zdCA9ICcpOyB2YXJfZHVtcCgkZ21zdCk7CiAgJGdtc3QgPSBmbW9kKCRnbXN0LDI0KTsKICBlY2hvKCckZ21zdCA9ICcpOyB2YXJfZHVtcCgkZ21zdCk7CiAgaWYgKCRnbXN0IDwgMCkgJGdtc3QgPSAoJGdtc3QgKyAyNCk7CiAgZWNobygnJGdtc3QgPSAnKTsgdmFyX2R1bXAoJGdtc3QpOwoKICAvLyBMb2NhbCBtZWFuIHNpZGVyZWFsIHRpbWUKICAkbG1zdCA9ICgkZ21zdCArICRsb25nIC8gMTUpOwogIGVjaG8oJyRsbXN0ID0gJyk7IHZhcl9kdW1wKCRsbXN0KTsKICAkbG1zdCA9IGZtb2QoJGxtc3QsMjQpOwogIGVjaG8oJyRsbXN0ID0gJyk7IHZhcl9kdW1wKCRsbXN0KTsKICBpZiAoJGxtc3QgPCAwKSAkbG1zdCA9ICgkbG1zdCArIDI0KTsKICBlY2hvKCckbG1zdCA9ICcpOyB2YXJfZHVtcCgkbG1zdCk7CiAgJGxtc3QgPSBkZWcycmFkKCRsbXN0ICogMTUpOwogIGVjaG8oJyRsbXN0ID0gJyk7IHZhcl9kdW1wKCRsbXN0KTsKCiAgLy8gSG91ciBhbmdsZQogICRoYSA9ICgkbG1zdCAtICRyYSk7CiAgZWNobygnJGhhID0gJyk7IHZhcl9kdW1wKCRoYSk7CiAgaWYgKCRoYSA8IHBpKCkpICRoYSA9ICgkaGEgKyAyKnBpKCkpOwogIGVjaG8oJyRoYSA9ICcpOyB2YXJfZHVtcCgkaGEpOwogIGlmICgkaGEgPiBwaSgpKSAkaGEgPSAoJGhhIC0gMipwaSgpKTsKICBlY2hvKCckaGEgPSAnKTsgdmFyX2R1bXAoJGhhKTsKCiAgLy8gTGF0aXR1ZGUgdG8gcmFkaWFucwogICRsYXQgPSBkZWcycmFkKCRsYXQpOwogIGVjaG8oJyRsYXQgPSAnKTsgdmFyX2R1bXAoJGxhdCk7CgogIC8vIEF6aW11dGggYW5kIGVsZXZhdGlvbgogICRlbCA9IChhc2luKHNpbigkZGVjKSAqIHNpbigkbGF0KSArIGNvcygkZGVjKSAqIGNvcygkbGF0KSAqIGNvcygkaGEpKSk7CiAgZWNobygnJGVsID0gJyk7IHZhcl9kdW1wKCRlbCk7CiAgJGF6ID0gKGFzaW4oLWNvcygkZGVjKSAqIHNpbigkaGEpIC8gY29zKCRlbCkpKTsKICBlY2hvKCckYXogPSAnKTsgdmFyX2R1bXAoJGF6KTsKCiAgLy8gRm9yIGxvZ2ljIGFuZCBuYW1lcywgc2VlIFNwZW5jZXIsIEouVy4gMTk4OS4gU29sYXIgRW5lcmd5LiA0Mig0KTozNTMgICAgICAKICBpZiAoKHNpbigkZGVjKSAtIHNpbigkZWwpICogc2luKCRsYXQpKSA+MDApIHsKICAgIGlmKHNpbigkYXopIDwgMCkgJGF6ID0gKCRheiArIDIqcGkoKSk7CiAgfSBlbHNlIHsKICAgICRheiA9IChwaSgpIC0gJGF6KTsKICB9CiAgZWNobygnJGF6ID0gJyk7IHZhcl9kdW1wKCRheik7CgogICRlbCA9IHJhZDJkZWcoJGVsKTsKICBlY2hvKCckZWwgPSAnKTsgdmFyX2R1bXAoJGVsKTsKICAkYXogPSByYWQyZGVnKCRheik7CiAgZWNobygnJGF6ID0gJyk7IHZhcl9kdW1wKCRheik7CiAgJGxhdCA9IHJhZDJkZWcoJGxhdCk7CiAgZWNobygnJGxhdCA9ICcpOyB2YXJfZHVtcCgkbGF0KTsKCiAgcmV0dXJuIGFycmF5KG51bWJlcl9mb3JtYXQoJGVsLDIpLG51bWJlcl9mb3JtYXQoJGF6LDIpKTsKfQp2YXJfZHVtcChnZXRTdW5Qb3NpdGlvbigtNC43Nzg2NywgMTEuODYzNjQsIDIwMTMsIDksIDEsIDEwLCAwLCAwKSk7CgovLyB5b3VyIGNvZGUgZ29lcyBoZXJl