date_sunrise() et date_sunset()
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

date_sunrise() et date_sunset()



  1. #1
    invite4cfc68f9

    Question date_sunrise() et date_sunset()


    ------

    Bonjour à tous,

    J'aimerais vos lumières sur le fonctionnement de ces fonctions PHP, à priori assez simples, car je suis en proie à quelques soucis.

    Par exemple :

    Pour trouver l'heure de lever et coucher de soleil de Paris, j'ai ces paramètres :

    Code PHP:
    echo date_sunrise(time(), SUNFUNCS_RET_STRING48.82172.3378902);
    echo 
    date_sunset(time(), SUNFUNCS_RET_STRING48.82172.3378902); 
    J'obtiens donc les heures : Lever 8:32 / Coucher 18:36. Ce qui semble raisonnable.

    En revanche où ça se complique, c'est si je veux par exemple les heures de lever et coucher du soleil de Melbourne en Australie :

    Code PHP:
    echo date_sunrise(time(), SUNFUNCS_RET_STRING, -37.667144.8339011);
    echo 
    date_sunset(time(), SUNFUNCS_RET_STRING, -37.667144.8339011); 
    J'obtiens : Lever 21:22 / Coucher 9:46. Soit les heures françaises, alors qu'il serait censé être marqué les horaires de Lever/Coucher de soleil locaux de Melbourne, plutot proches des horaires de Paris ...

    J'ai testé en faisant un décalage du timestamp de +11h (time() + (11 * 3600)), j'ai changé l'argument timeoffset de +11h par +2h de notre heure locale, rien n'y fait.

    Où est mon problème ? Un paramètrage dans le php.ini ?

    Si quelqu'un peut m'éclairer là-dessus, ca me tirerait une bonne épine du pied.

    Merci d'avant et bon après-midi.

    Nico.

    -----

  2. #2
    polo974

    Re : date_sunrise() et date_sunset()

    et tu penses vraiment que M. PHP sait déterminer le timezone à partir d'une coordonnée terrestre?

    sinon, en allant voir http://php.net/manual/fr/function.date-sunrise.php
    puis http://www.php.net/manual/fr/functio...mezone-set.php
    et enfin http://www.php.net/manual/fr/timezones.php

    tu devrais trouver ton bonheur...
    Jusqu'ici tout va bien...

  3. #3
    invite4cfc68f9

    Re : date_sunrise() et date_sunset()

    Bonsoir,

    Merci mais j'ai déjà été voir ces liens depuis longtemps ... Je n'ai pas précisé que je ne suis pas du tout débutant en PHP et c'est vraiment en dernier recours que je m'adresse sur ce forum car j'ai l'habitude de me débrouiller seul.

    Cependant ton raisonnement concernant le "timezone" pourrait peut-être ma solution et je vais tester ça de suite, mais à ce moment là je ne vois pas pourquoi nous avons besoin de préciser l'argument "gmtoffset" si derrière on doit redéfinir le "timezone" dans le php.ini ou avec une fonction ... Bref je ne trouve pas ça logique !

    Je vous tiens au courant, merci et bonne soirée.

  4. #4
    polo974

    Re : date_sunrise() et date_sunset()

    En fait, c'est "tout bête", il faut indique le décalage horaire à appliquer en dernier paramètre.
    en reprenant leur exemple.
    en locat time (sans le dernier paramètre):
    echo date("D M d Y"). ', sunrise time : ' .date_sunrise(time(), SUNFUNCS_RET_STRING, 38.4, -9, 90);

    en gérant à la main le décalage:
    echo date("D M d Y"). ', sunrise time : ' .date_sunrise(time(), SUNFUNCS_RET_STRING, 38.4, -9, 90, 2.25);

    on peut donc indiquer un décalage en flottant, le pire découpage étant le quart d'heure...
    pas besoin de bricoler le timezone du serveur php.

    mais en fait, avec les soucis heure d'été / d'hiver, il faut peut-être en passer par une modif locale du timezone et de ne pas donner de gmtoffset. pas essayé...
    Jusqu'ici tout va bien...

  5. A voir en vidéo sur Futura
  6. #5
    invite4cfc68f9

    Re : date_sunrise() et date_sunset()

    Bonjour,

    Alors plus de précisions sur mon "problème". Après avoir essayé plusieurs trucs, je me suis aperçu que d'utiliser la constante SUNFUNCS_RET_TIMESTAMP au lieu de SUNFUNCS_RET_STRING changeait beaucoup de choses ...

    Dans ma démo, pour illustrer mon problème, j'avais mis ainsi :

    Code PHP:
    echo date_sunrise(time(), SUNFUNCS_RET_STRING, -37.667144.8339011); 
    echo 
    date_sunset(time(), SUNFUNCS_RET_STRING, -37.667144.8339011); 
    Qui au final après test sur mon serveur donnait au final les bons horaires, que je n'avais pas dans mon script initial qui ressemblait à ça :

    Code PHP:
    $time_lever =  date_sunrise(time(), SUNFUNCS_RET_TIMESTAMP, -37.667144.8339011); 
    $time_coucher date_sunset(time(), SUNFUNCS_RET_TIMESTAMP, -37.667144.8339011);

    // ... Utilisation de ces variables pour d'autres applications ...

    echo 'Lever du soleil : '.date("G:i"$time_lever).' - Coucher du soleil : '.date("G:i"$time_coucher); 
    Et là les horaires obtenus par ce dernier étaient ceux de l'heure française et non l'heure locale (Lever du soleil : 15:42 - Coucher du soleil : 4:40 dans cet exemple). Bref à n'y rien comprendre ...

    Pour résoudre ça, n'ayant pas d'autre choix que d'utiliser les timestamps pour d'autres applications dans mon script, j'ai été obligé de les recréer à l'aide de la fonction mktime(). Ce qui m'a donné ce script :

    Code PHP:
    list($heure_lever$minute_lever explode(":"date_sunrise(time(), SUNFUNCS_RET_STRING, -37.667144.8339011)); 
    list(
    $heure_coucher$minute_coucher explode(":",  date_sunset(time(), SUNFUNCS_RET_STRING, -37.667144.8339011));

    $time_lever mktime($heure_lever$minute_lever0date("m"), date("d"), date("Y"));
    $time_coucher mktime($heure_coucher$minute_coucher0date("m"), date("d"), date("Y"));

    // ... Utilisation de ces variables pour d'autres applications ...

    echo 'Lever du soleil : '.date("G:i"$time_lever).' - Coucher du soleil : '.date("G:i"$time_coucher); 
    Je sais bien que ça ne fait pas de raccourci mais n'ayant pas trouvé le problème lié à SUNFUNCS_RET_TIMESTAMP, cette alternative marche impeccable !

    Merci néanmoins pour l'aide polo974 qui, même si c'était des choses que j'avais déjà testé, m'a quand-même permis de faire quelques diagnostics .

    Bonne fin de semaine.

    Nico.