Inserer php dans du javascript

Résolu
Bonjour,
voila, je suis en train de mettre un script de compte a rebours sur mon site, il fonctionne , mais uniquement en rapport avec l'horloge du client qui regarde la page, je voudrai si possible que le decompte se fasse avec l'heure du serveur pour que tous les membres du site est le meme compteur -_- ^^
voila le script:::

<script language="JavaScript">
// la date à partir de laquelle on compte
var cible = new Date("April 24, 2009 23:59:59");

// nombre de millisecondes par jour, heure, minute et seconde
var mms_jour = 24 * 60 * 60 * 1000;
var mms_heure = 60 * 60 * 1000;
var mms_minute = 60 * 1000;
var mms_seconde = 1000;

function decompte() {

// la date courante
var aujourdhui = new Date();

// on crée les variables qui accueilleront les différences entre aujourd'hui et la date à atteindre
var change_j = -1;
var change_h = -1;
var change_m = -1;

// le total de millisecondes de différences
var diff_mms = cible.getTime() - aujourdhui.getTime();

// pareil pour les jours
diff_jours = Math.floor(diff_mms / mms_jour);
diff_mms -= diff_jours * mms_jour;

// pour les heures
diff_heures = Math.floor(diff_mms / mms_heure);
diff_mms -= diff_heures * mms_heure;

// les... minutes, bravo ;-)
diff_minutes = Math.floor(diff_mms / mms_minute);
diff_mms -= diff_minutes * mms_minute;

// les secondes, ce qui reste en fait.
var diff_secondes = Math.floor(diff_mms / mms_seconde);

// on affecte nos résultats aux champs du formulaire
document.getElementById("jours").innerHTML = diff_jours;
document.getElementById("heures").innerHTML = diff_heures;
document.getElementById("minutes").innerHTML = diff_minutes;
document.getElementById("secondes").innerHTML = diff_secondes;

// on relance la fonction pour actualiser à la seconde
setTimeout("decompte()",1000);
}
</script>

<font face="arial" size="4"><b>Il ne reste plus que : </b></font>
<span id="jours">0</span> jours
<span id="heures">0</span> heures
<span id="minutes">0</span> minutes
<span id="secondes">0</span> secondes !

donc ce script, vous pouvez le tester, il marche super bien, mais il s'occupe de l'horloge du client en non pas du serveur ^^

peut-etre, je dis bien peut-etre faudrait -il faire un truc dans le genre::::::

<?php
$heure = date("H:i");
?>
<script language="JavaScript">
// la date à partir de laquelle on compte
var cible = new Date("April 24, 2009 23:59:59");

// nombre de millisecondes par jour, heure, minute et seconde
var mms_jour = 24 * 60 * 60 * 1000;
var mms_heure = 60 * 60 * 1000;
var mms_minute = 60 * 1000;
var mms_seconde = 1000;

function decompte() {

// la date courante
var aujourdhui = new Date(<?= $heure ?>);

// on crée les variables qui accueilleront les différences entre aujourd'hui et la date à atteindre
var change_j = -1;
var change_h = -1;
var change_m = -1;
..........(et la fin du code)

mais cela ne fonctionne bien assuremmment pas 8-(
--
----------------------------------------------------------------------
/  La vie ne vaut rien mais rien ne vaut la vie !!!!!  /
----------------------------------------------------------------------
Configuration: Windows XP
Firefox 3.0.8

14 réponses

  1. OOOOUUUUUUUUUUUAAAAAAAAAAIIIIIIIIIICCCCCCCCCCHHHHHHHHHHHHHH

    PhP et posotaz
    GRAND merci 8-) ca marche on y est^^
    1. re, je viens de mettre var aujourdhui = new Date(<?php echo time()*1000 ?>);
      donc cela fonctionne un petit peu, en fait, ca me donne bien le temps restant mais une fois affiche, bah ca bouge plus, enfin ca fait plus le decompte ^^ ca me dit bien il reste 9jours 8heures etc....mais ca bouge plus^^
      1. Mais si ca fonctionne sauf que comme tu ne fais jamais varier l'heure dans ta variable aujourdhui ben forcément la différence entre celle-ci et le 24 avril à minuit reste constante donc ton script affiche tout le temps les mêmes écarts CQFD

        Voici qui devrait aller mieux (vérifier s'il faut bien faire un + delta_time plutôt qu'un - delta_time)
        <script language="JavaScript">
        // la date à partir de laquelle on compte
        var cible = new Date("April 24, 2009 23:59:59");
        
        // nombre de millisecondes par jour, heure, minute et seconde
        var mms_jour = 24 * 60 * 60 * 1000;
        var mms_heure = 60 * 60 * 1000;
        var mms_minute = 60 * 1000;
        var mms_seconde = 1000;
        <?php
        $heure=getdate();
        ?>
        var date_serveur_PHP = new Date(<?php echo $heure["year"].",".($heure["mon"]-1).",".$heure["mday"].",".$heure["hours"].",".$heure["minutes"].",".$heure["seconds"];?>);
        var date_locale = new Date();
        // Calcul du décalage entre l'horloge du serveur et celle du PC : ca peut pas être trop précis non plus faut pas rêver ;-)
        // delta_time  = nbre de millisecondes qu'il faut ajouter (ou retrancher) à l'horloge locale pour retomber sur l'heure du serveur
        var delta_time = date_serveur_PHP.getTime() - date_locale.getTime(); 
        
        
        function decompte() {
        
        // la date & heure actuallisée à chaque passage dans decompte()
        var aujourdhui = new Date();
        
        // on crée les variables qui accueilleront les différences entre aujourd'hui et la date à atteindre
        var change_j = -1;
        var change_h = -1;
        var change_m = -1;
        
        // le total de millisecondes de différences
        var diff_mms = cible.getTime() - (aujourdhui.getTime() + delta_time);
        
        // pareil pour les jours
        diff_jours = Math.floor(diff_mms / mms_jour);
        diff_mms -= diff_jours * mms_jour;
        
        // pour les heures
        diff_heures = Math.floor(diff_mms / mms_heure);
        diff_mms -= diff_heures * mms_heure;
        
        // les... minutes, bravo ;-)
        diff_minutes = Math.floor(diff_mms / mms_minute);
        diff_mms -= diff_minutes * mms_minute;
        
        // les secondes, ce qui reste en fait.
        var diff_secondes = Math.floor(diff_mms / mms_seconde);
        
        
        // on affecte nos résultats aux champs du formulaire
        document.getElementById("jours").innerHTML = diff_jours;
        
        document.getElementById("heures").innerHTML = diff_heures;
        
        document.getElementById("minutes").innerHTML = diff_minutes;
        
        document.getElementById("secondes").innerHTML = diff_secondes;
        
        // on relance la fonction pour actualiser à la seconde
        setTimeout("decompte()",1000);
        }
        </script> 
        1. Je devais pas aller me coucher moi ? :D

          Bref, la grosse bêtise c'est que je ne vois pas où tu as défini la variable $heure, regarde mieux l'exemple de PhP.

          Sinon, à tout hasard et pour éviter de s'emmêler les pinceaux avec tous ces arguments, ne serait-il pas plus simple d'appeler la fonction time() du PHP, qui elle est capable de retourner un timestamp exprimé en secondes, et de multiplier ce résultat par 1000 afin d'obtenir nos milisecondes tant désirées ?
          new Date(<?php echo time()*1000 ?>);
          Car si je ne dis pas de bêtises il existe une 5è variante du constructeur Date() qui prend en argument des milisecondes...

          Je ne sais pas ce que ça vaut, c'est à tester...
          1. boooooooooooooooon , lol, je ne vois plus rien sur mon script , a force de regarder ^^, voila ce que j'ai mis, je sais que il doit y avoir une grosse betise mais bon, j'y arrive pas alors sur ma page j'ai mis ca:::

            dans le head::
            <script language="JavaScript">
            // la date à partir de laquelle on compte
            var cible = new Date("April 24, 2009 23:59:59");

            // nombre de millisecondes par jour, heure, minute et seconde
            var mms_jour = 24 * 60 * 60 * 1000;
            var mms_heure = 60 * 60 * 1000;
            var mms_minute = 60 * 1000;
            var mms_seconde = 1000;

            function decompte() {

            // la date courante
            var aujourdhui = new Date(<?php echo $heure["year"].",".($heure["mon"]-1).",".$heure["mday"].",".$heure["hours"].",".$heure["minutes"].",".$heure["seconds"];?>);

            // on crée les variables qui accueilleront les différences entre aujourd'hui et la date à atteindre
            var change_j = -1;
            var change_h = -1;
            var change_m = -1;

            // le total de millisecondes de différences
            var diff_mms = cible.getTime() - aujourdhui.getTime();

            // pareil pour les jours
            diff_jours = Math.floor(diff_mms / mms_jour);
            diff_mms -= diff_jours * mms_jour;

            // pour les heures
            diff_heures = Math.floor(diff_mms / mms_heure);
            diff_mms -= diff_heures * mms_heure;

            // les... minutes, bravo ;-)
            diff_minutes = Math.floor(diff_mms / mms_minute);
            diff_mms -= diff_minutes * mms_minute;

            // les secondes, ce qui reste en fait.
            var diff_secondes = Math.floor(diff_mms / mms_seconde);

            // on affecte nos résultats aux champs du formulaire
            document.getElementById("jours").innerHTML = diff_jours;

            document.getElementById("heures").innerHTML = diff_heures;

            document.getElementById("minutes").innerHTML = diff_minutes;

            document.getElementById("secondes").innerHTML = diff_secondes;

            // on relance la fonction pour actualiser à la seconde
            setTimeout("decompte()",1000);
            }
            </script>

            pour le body:::
            <body onLoad="decompte()">

            <font face="arial" size="4"><b>Il ne reste plus que : </b></font>
            <span id="jours">0</span> jours
            <span id="heures">0</span> heures
            <span id="minutes">0</span> minutes
            <span id="secondes">0</span> secondes !

            et ca marche pas lalalala ^^
            1. Oups, des réponses se sont chevauchées (c'est ce qui arrive quand on oublie de faire F5 après s'être absentés un bon moment) mais notre ami pHp t'a carrément donné la solution quand il a écrit :

              var cible = new Date(<?php echo $heure["year"].",".($heure["mon"]-1).",".$heure["mday"].",".$heure["hours"].",".$heure["minutes"].",".$heure["seconds"];?>);

              C'est exactement ce que je voulais exprimer. En faisant un new Date() en JS tu obtiens la date du jour (année, date, mois, heure,...) donc je ne vois aucune raison qui te pousse à repousser sa solution en prétendant que tu désires juste t'en tenir au jour et à l'heure... ça n'a pas de sens, pour obtenir un timestamp correct il faut une date et il n'existe pas de demi-dates. Si tu donnes une heure tu dois préciser à quelle date elle appartient. D'ailleurs il n'existe aucun constructeur Date(heures, minutes, secondes).

              EDIT : Bon, visiblement je suis fatigué... PhP toutes mes excuses, on va arrêter de se chevaucher pour ce soir, je vais me coucher ^^
              1. Héhéhé

                Ceci dit il faut bien reconnaître que les constructeurs de l'objet Date sont merd...ques à souhait ! Tantôt faut mettre le mois sous forme de chiffre tantôt sous forme littéral mais la palme de la connerie revient aux mois numériques qui commencent à ... ZERO !

                Sur ce good night
            2. posotaz, merci, je vais bouquiner un peu alors ^^
              le NaN est en reponse de Benj
              1. merci mais pareil ca me met les NaN a la place des chiffres :( merci quand même ^^
                1. Bonjour,

                  Je vais réfléchir en même temps que toi...

                  Comme tu l'as bien écrit, var diff_mms = cible.getTime() - aujourdhui.getTime(); calcule la différence de milisecondes entre deux dates.

                  Donc en principe ça se résoudrait facilement si on pouvait obtenir le timestamp en milisecondes d'une date en PHP. Le problème c'est que j'ai beaucoup de mal à trouver une méthode standard pour reproduire l'équivalent d'un getTime(). Qu'a-t-on a d'autre ?

                  1. JavaScript peut créer une date de cette façon : new Date(annee, mois, jour, heures, minutes, secondes).

                  2. La fonction getdate() de PHP récupère un tableau associatif... il est alors aisé d'extraire l'année, le mois, le jour, les heures, les minutes et les secondes... informations qu'on peut fournir comme arguments à l'objet Date.

                  => On est maintenant capables de créer un objet Date JavaScript depuis des informations obtenues du serveur, par le biais de PHP... je pense qu'on a tout, non ?

                  La documentation complète de getdate() : https://www.php.net/getdate

                  Bon courage et tiens-nous au courant !
                  1. il manque le echo dans ton code php

                    remplace :
                    var aujourdhui = new Date("<?php date('H:i'); ?>"); 

                    par :

                    var aujourdhui = new Date("<?php echo date('H:i'); ?>"); 
                    1. ok merci, php, je ne mets pas le mois juste le jour, l'heure , les minutes et les secondes^^

                      donc je viens de tester mais avec
                      var aujourdhui = new Date("<?php date('H:i'); ?>");
                      si je mets cela:reponse:: Il ne reste plus que : NaN jours NaN heures NaN minutes NaN seconde
                      je sais pas d'ou il trouve les NaN, mais ils sont là ^^

                      1. Peut importe que tu n'utilises que l'heure et les minutes dans ton code.

                        Le constructeur Javascript pour l'objet Date() attend tous les paramètres et pas seulement les heures et le minutes. Enfin je crois que certains paramètres peuvent être omis mais en partant de la droite et pas l'inverse !

                        Voici les 4 variantes supportées par le constructeur

                        Variante 1:
                        nomobjet = new Date();

                        Variante 2:
                        nomobjet = new Date("mois jour, annee heures:minutes:secondes");

                        Variante 3:
                        nomobjet = new Date(annee,mois,jour);

                        Variante 4:
                        nomobjet = new Date(annee,mois,jour,heures,minutes,secondes);

                        Si tu omets un paramètre cela provoque une erreur et donc au final ta variable aujourdhui est un objet mal initialisé (avec une date invalide) d'où des NAN ensuite en pagaille.

                    2. Bonsoir

                      Si tu veux une heure compatible avec JS il faut pense à retirer 1 au mois ;-)

                      En remplaçant :

                      <script language="JavaScript">
                      // la date à partir de laquelle on compte
                      var cible = new Date("April 24, 2009 23:59:59");
                      
                      // nombre de millisecondes par jour, heure, minute et seconde
                      var mms_jour = 24 * 60 * 60 * 1000;
                      var mms_heure = 60 * 60 * 1000;
                      var mms_minute = 60 * 1000;
                      var mms_seconde = 1000;
                      
                      function decompte() {
                      
                      // la date courante
                      var aujourdhui = new Date(); 
                      


                      Par
                      <?php
                      $heure=getdate();
                      ?>
                      <script language="JavaScript">
                      // L'objet Date en JS accepte la syntaxe : Date(annee,mois,jour,heures,minutes,secondes) mais les mois commencent à ZERO ! Janvier = 0   Février = 1  etc ...
                      var cible = new Date(<?php echo $heure["year"].",".($heure["mon"]-1).",".$heure["mday"].",".$heure["hours"].",".$heure["minutes"].",".$heure["seconds"];?>);
                      
                      // nombre de millisecondes par jour, heure, minute et seconde
                      var mms_jour = 24 * 60 * 60 * 1000;
                      var mms_heure = 60 * 60 * 1000;
                      var mms_minute = 60 * 1000;
                      var mms_seconde = 1000;
                      
                      function decompte() {
                      
                      // la date courante
                      var aujourdhui = new Date(); 
                      


                      Ca pourrait marcher . A tester
                      1. Salut,

                        et si tu fais ça, ça marche ou pas ?

                        <script language="JavaScript">
                        // la date à partir de laquelle on compte
                        var cible = new Date("April 24, 2009 23:59:59");
                        
                        // nombre de millisecondes par jour, heure, minute et seconde
                        var mms_jour = 24 * 60 * 60 * 1000;
                        var mms_heure = 60 * 60 * 1000;
                        var mms_minute = 60 * 1000;
                        var mms_seconde = 1000;
                        
                        function decompte() {
                        
                        // la date courante
                        var aujourdhui = new Date("<?php date('H:i'); ?>");
                        
                        // on crée les variables qui accueilleront les différences entre aujourd'hui et la date à atteindre
                        var change_j = -1;
                        var change_h = -1;
                        var change_m = -1;
                        ..........(et la fin du code) 
                        


                        A la place de ta supposition.
                        J'ai pas testé mais ça peut marcher ! ^^

                        Sinon, ben tu appelle juste en Ajax et le tour est réglé !
                        Si ça marche pas, essaye en remplaçant var aujourdhui = new Date("<?php date('H:i'); ?>"); par var aujourdhui = new Date("<?php echo date('H:i'); ?>");

                        A+

                        Gaerebut