Inserer php dans du javascript [Résolu/Fermé]

Signaler
Messages postés
862
Date d'inscription
mardi 11 septembre 2007
Statut
Membre
Dernière intervention
10 octobre 2018
-
Messages postés
862
Date d'inscription
mardi 11 septembre 2007
Statut
Membre
Dernière intervention
10 octobre 2018
-
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-(

14 réponses

Messages postés
1771
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
23 décembre 2009
600
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 59792 internautes nous ont dit merci ce mois-ci

Messages postés
1042
Date d'inscription
mardi 30 octobre 2007
Statut
Membre
Dernière intervention
22 novembre 2013
167
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
Messages postés
1771
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
23 décembre 2009
600
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
Messages postés
862
Date d'inscription
mardi 11 septembre 2007
Statut
Membre
Dernière intervention
10 octobre 2018
115
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à ^^

Messages postés
1771
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
23 décembre 2009
600
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.

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'); ?>"); 
Messages postés
500
Date d'inscription
samedi 23 juin 2007
Statut
Membre
Dernière intervention
19 juin 2011
191
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 !
Messages postés
862
Date d'inscription
mardi 11 septembre 2007
Statut
Membre
Dernière intervention
10 octobre 2018
115
merci mais pareil ca me met les NaN a la place des chiffres :( merci quand même ^^
Messages postés
862
Date d'inscription
mardi 11 septembre 2007
Statut
Membre
Dernière intervention
10 octobre 2018
115
posotaz, merci, je vais bouquiner un peu alors ^^
le NaN est en reponse de Benj
Messages postés
862
Date d'inscription
mardi 11 septembre 2007
Statut
Membre
Dernière intervention
10 octobre 2018
115
ok, merci PhP ^^
Messages postés
500
Date d'inscription
samedi 23 juin 2007
Statut
Membre
Dernière intervention
19 juin 2011
191
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 ^^
Messages postés
1771
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
23 décembre 2009
600
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
Messages postés
862
Date d'inscription
mardi 11 septembre 2007
Statut
Membre
Dernière intervention
10 octobre 2018
115
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 ^^
Messages postés
500
Date d'inscription
samedi 23 juin 2007
Statut
Membre
Dernière intervention
19 juin 2011
191
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...
Messages postés
862
Date d'inscription
mardi 11 septembre 2007
Statut
Membre
Dernière intervention
10 octobre 2018
115
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^^
Messages postés
862
Date d'inscription
mardi 11 septembre 2007
Statut
Membre
Dernière intervention
10 octobre 2018
115
OOOOUUUUUUUUUUUAAAAAAAAAAIIIIIIIIIICCCCCCCCCCHHHHHHHHHHHHHH

PhP et posotaz
GRAND merci 8-) ca marche on y est^^