function getSunTimes($fh, $La, $Lo, $mois, $jour)
{
    $returnArray = array("sunrise" => null, "sunset" => null);
    if ($fh == "") {
        $fh = date("H") - gmdate("H");
    }
    if ($La == "") {
        $La = 48.833;
    }
    if ($Lo == "") {
        $Lo = -2.333;
    }
    if ($mois == "") {
        $mois = date("m");
    }
    if ($jour == "") {
        $jour = date("d");
    }
    // Fuseau horaire et coordonnées géographiques
    $k = 0.0172024;
    $jm = 308.67;
    $jl = 21.55;
    $e = 0.0167;
    $ob = 0.4091;
    $PI = 3.1415926536;
    //Hauteur du soleil au lever et au coucher
    $dr = $PI / 180;
    $hr = $PI / 12;
    $ht = -40 / 60;
    $ht = $ht * $dr;
    $La = $La * $dr;
    $Lo = $Lo * $dr;
    //Date
    if ($mois < 3) {
        $mois = $mois + 12;
    }
    //Heure TU du milieu de la journée
    $h = 12 + $Lo / $hr;
    //Nombre de jours écoulés depuis le 1 Mars O h TU
    $J = floor(30.61 * ($mois + 1)) + $jour + $h / 24 - 123;
    //Anomalie et longitude moyenne
    $M = $k * ($J - $jm);
    $L = $k * ($J - $jl);
    //Longitude vraie
    $S = $L + 2 * $e * Sin($M) + 1.25 * $e * $e * Sin(2 * $M);
    //Coordonnées rectangulaires du soleil dans le repère équatorial
    $X = Cos($S);
    $Y = Cos($ob) * Sin($S);
    $Z = Sin($ob) * Sin($S);
    //Equation du temps et déclinaison
    $R = $L;
    $rx = Cos($R) * $X + Sin($R) * $Y;
    $ry = -Sin($R) * $X + Cos($R) * $Y;
    $X = $rx;
    $Y = $ry;
    $ET = atan($Y / $X);
    $DC = atan($Z / Sqrt(1 - $Z * $Z));
    //Angle horaire au lever et au coucher
    $cs = (Sin($ht) - Sin($La) * Sin($DC)) / Cos($La) / Cos($DC);
    $CalculSol = "";
    if ($cs > 1) {
        $CalculSol = "Ne se lève pas";
    }
    if ($cs < -1) {
        $CalculSol = "Ne se couche pas";
    }
    if ($cs == 0) {
        $ah = $PI / 2;
    } else {
        $ah = atan(Sqrt(1 - $cs * $cs) / $cs);
    }
    if ($cs < 0) {
        $ah = $ah + $PI;
    }
    //Lever du soleil
    $Pm = $h + $fh + ($ET - $ah) / $hr;
    if ($Pm < 0) {
        $Pm = $Pm + 24;
    }
    if ($Pm > 24) {
        $Pm = $Pm - 24;
    }
    $hs = floor($Pm);
    $Pm = floor(60 * ($Pm - $hs));
    if (strlen($hs) < 2) {
        $hs = "0" . $hs;
    }
    if (strlen($Pm) < 2) {
        $Pm = "0" . $Pm;
    }
    if ($CalculSol == "") {
        $lev = $hs . ":" . $Pm;
    } else {
        $lev = "00:00";
    }
    //Coucher du soleil
    $Pm = $h + $fh + ($ET + $ah) / $hr;
    if ($Pm > 24) {
        $Pm = $Pm - 24;
    }
    if ($Pm < 0) {
        $Pm = $Pm + 24;
    }
    $hs = floor($Pm);
    $Pm = floor(60 * ($Pm - $hs));
    if (strlen($hs) < 2) {
        $hs = "0" . $hs;
    }
    if (strlen($Pm) < 2) {
        $Pm = "0" . $Pm;
    }
    if ($CalculSol == "") {
        $couch = $hs . ":" . $Pm;
    } else {
        $couch = "00:00";
    }
    $returnArray["sunrise"] = date("d/M/y G:i:s", strtotime($lev));
    $returnArray["sunset"] = date("d/M/y G:i:s", strtotime($couch));
    $returnArray["sunrise"] = DateTime::createFromFormat('H:i', $lev);
    $returnArray["sunset"] = DateTime::createFromFormat('H:i', $couch);
    return $returnArray;
}
示例#2
0
 function SumSizeOneGoods($xi, $yi, $zi, $qty)
 {
     // îòñîðòèðîâàòü ãðóçû ïî âîçðàñòàíèþ
     $ar = array($xi, $yi, $zi);
     sort($ar);
     //print_r($ar);
     if ($qty <= 1) {
         return array('X' => $ar[0], 'Y' => $ar[1], 'Z' => $ar[2]);
     }
     $x1 = 0;
     $y1 = 0;
     $z1 = 0;
     $l = 0;
     $max1 = floor(Sqrt($qty));
     for ($y = 1; $y <= $max1; $y++) {
         $i = ceil($qty / $y);
         $max2 = floor(Sqrt($i));
         for ($z = 1; $z <= $max2; $z++) {
             $x = ceil($i / $z);
             $l2 = $x * $ar[0] + $y * $ar[1] + $z * $ar[2];
             if ($l == 0 or $l2 < $l) {
                 $l = $l2;
                 $x1 = $x;
                 $y1 = $y;
                 $z1 = $z;
             }
         }
     }
     // êîëè÷åñòâî òîâàðîâ ïî ñòîðîíàì
     //echo '<br>êîëè÷åñòâî òîâàðîâ ïî ñòîðîíàì: x1=', $x1,' , y1=', $y1,' , z1=', $z1;
     // èòîãîâûå ãàáàðèòû òîâàðà
     //echo '<br>èòîãîâûå ãàáàðèòû òîâàðà: x1=', $x1*$ar[0],' , y1=', $y1*$ar[1],' , z1=', $z1*$ar[2];
     return array('X' => $x1 * $ar[0], 'Y' => $y1 * $ar[1], 'Z' => $z1 * $ar[2]);
 }
示例#3
0
 function SumSizeOneGoods($xi, $yi, $zi, $qty)
 {
     // ????????????? ????? ?? ???????????
     $ar = array($xi, $yi, $zi);
     sort($ar);
     //print_r($ar);
     if ($qty <= 1) {
         return array('X' => $ar[0], 'Y' => $ar[1], 'Z' => $ar[2]);
     }
     $x1 = 0;
     $y1 = 0;
     $z1 = 0;
     $l = 0;
     $max1 = floor(Sqrt($qty));
     for ($y = 1; $y <= $max1; $y++) {
         $i = ceil($qty / $y);
         $max2 = floor(Sqrt($i));
         for ($z = 1; $z <= $max2; $z++) {
             $x = ceil($i / $z);
             $l2 = $x * $ar[0] + $y * $ar[1] + $z * $ar[2];
             if ($l == 0 or $l2 < $l) {
                 $l = $l2;
                 $x1 = $x;
                 $y1 = $y;
                 $z1 = $z;
             }
         }
     }
     // ?????????? ??????? ?? ????????
     //echo '<br>?????????? ??????? ?? ????????: x1=', $x1,' , y1=', $y1,' , z1=', $z1;
     // ???????? ???????? ??????
     //echo '<br>???????? ???????? ??????: x1=', $x1*$ar[0],' , y1=', $y1*$ar[1],' , z1=', $z1*$ar[2];
     return array('X' => $x1 * $ar[0], 'Y' => $y1 * $ar[1], 'Z' => $z1 * $ar[2]);
 }
示例#4
0
 /**
  * 火星坐标经度偏移量辅助计算函数
  *
  * @param float $lng
  *        	经度,竖线,0-180,中国在东经72.004-137.8347
  * @param float $lat
  *        	纬度,横线,0-90,中国在北纬0.8293-55.8271
  * @return number
  * @version 0.13.5.28
  */
 private function lng_offset($lng, $lat)
 {
     $lng -= 105;
     $lat -= 35;
     $ret = 300 + $lng + 2 * $lat + 0.1 * $lng * $lng + 0.1 * $lng * $lat + 0.1 * Sqrt(Abs($lng));
     $ret += (20 * sin(6 * $lng * M_PI) + 20 * sin(2 * $lng * M_PI)) * 2 / 3;
     $ret += (20 * sin($lng * M_PI) + 40 * sin($lng / 3 * M_PI)) * 2 / 3;
     $ret += (150 * sin($lng / 12 * M_PI) + 300 * sin($lng / 30 * M_PI)) * 2 / 3;
     return $ret;
 }