par
Saian » 16 avr. 2021, 11:01
Je me suis fait ça :
<?php
/* init */
$latitude = 43.480512;
$longitude = -1.527791;
$zenith = [ 90, 34 ];// pour 90°34' (90 degrés et 34 minutes) le zenith qui fonctionne comme il faut chez moi converti en $zenithFloat plus bas. Utilisé pour levé et couché avec date_sunrise et date_sunset.
$utc = 2;// pour la france avec le décalage horaire actuel
$date = new DateTime();// un date time que je vais pouvoir manipuler pour changer la date
// calcul du zenith en float
$zenithFloat = $zenith[0] + ($zenith[1] / 60);
/* display */
// infos de la journée ($date = new DateTime();)
getSunInfos($date, $latitude, $longitude, $zenithFloat, $utc);
// infos de demain (add interval de P1D, Period 1 Day)
$date->add(new DateInterval('P1D'));//
getSunInfos($date, $latitude, $longitude, $zenithFloat, $utc);
function getSunInfos($date, $latitude, $longitude, $zenithFloat, $utc)
{
global $zenith;
// debug des variables
var_dump([
'$latitude' => $latitude,
'$longitude' => $longitude,
'$zenith' => $zenith,
'$zenithFloat' => $zenithFloat,
'$utc' => $utc,
'$date' => $date
]);
// j'utilise SUNFUNCS_RET_TIMESTAMP car je voulais m'afficher les secondes, c'est pour ça que je pousse le résultat dans un DateTime avec setTimestamp
$sunrise = (new DateTime())->setTimestamp(date_sunrise($date->getTimestamp(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenithFloat, $utc));
$sunset = (new DateTime())->setTimestamp(date_sunset($date->getTimestamp(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenithFloat, $utc));
echo $date->format("D M d Y"). ', sunrise time : ' . $sunrise->format('H:i:s');
echo '<br/>';
echo $date->format("D M d Y"). ', sunset time : ' . $sunset->format('H:i:s');
echo '<br/>';
echo '<br/>';
// pour controler mes résultats du dessus, notamment le calcul du zenith en float pour m'assurer que le résultat correspond pour les levé et couché quand le le zenith est de 90°35'
$sunInfo = date_sun_info($date->getTimestamp(), $latitude, $longitude);// ici le zenith est automatique et différent selon les clés c'est expliqué sur la doc de date_sun_info
foreach ($sunInfo as $key => $val) {
echo "$key: " . date("H:i:s", $val) . '<br/>';
}
echo '<br/>';
}
Je me suis fait ça :
[PHP]<?php
/* init */
$latitude = 43.480512;
$longitude = -1.527791;
$zenith = [ 90, 34 ];// pour 90°34' (90 degrés et 34 minutes) le zenith qui fonctionne comme il faut chez moi converti en $zenithFloat plus bas. Utilisé pour levé et couché avec date_sunrise et date_sunset.
$utc = 2;// pour la france avec le décalage horaire actuel
$date = new DateTime();// un date time que je vais pouvoir manipuler pour changer la date
// calcul du zenith en float
$zenithFloat = $zenith[0] + ($zenith[1] / 60);
/* display */
// infos de la journée ($date = new DateTime();)
getSunInfos($date, $latitude, $longitude, $zenithFloat, $utc);
// infos de demain (add interval de P1D, Period 1 Day)
$date->add(new DateInterval('P1D'));//
getSunInfos($date, $latitude, $longitude, $zenithFloat, $utc);
function getSunInfos($date, $latitude, $longitude, $zenithFloat, $utc)
{
global $zenith;
// debug des variables
var_dump([
'$latitude' => $latitude,
'$longitude' => $longitude,
'$zenith' => $zenith,
'$zenithFloat' => $zenithFloat,
'$utc' => $utc,
'$date' => $date
]);
// j'utilise SUNFUNCS_RET_TIMESTAMP car je voulais m'afficher les secondes, c'est pour ça que je pousse le résultat dans un DateTime avec setTimestamp
$sunrise = (new DateTime())->setTimestamp(date_sunrise($date->getTimestamp(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenithFloat, $utc));
$sunset = (new DateTime())->setTimestamp(date_sunset($date->getTimestamp(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenithFloat, $utc));
echo $date->format("D M d Y"). ', sunrise time : ' . $sunrise->format('H:i:s');
echo '<br/>';
echo $date->format("D M d Y"). ', sunset time : ' . $sunset->format('H:i:s');
echo '<br/>';
echo '<br/>';
// pour controler mes résultats du dessus, notamment le calcul du zenith en float pour m'assurer que le résultat correspond pour les levé et couché quand le le zenith est de 90°35'
$sunInfo = date_sun_info($date->getTimestamp(), $latitude, $longitude);// ici le zenith est automatique et différent selon les clés c'est expliqué sur la doc de date_sun_info
foreach ($sunInfo as $key => $val) {
echo "$key: " . date("H:i:s", $val) . '<br/>';
}
echo '<br/>';
}[/PHP]