Inserer php dans du javascript

Résolu/Fermé
cheese42 Messages postés 860 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 10 octobre 2018 - 15 avril 2009 à 21:53
cheese42 Messages postés 860 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 10 octobre 2018 - 16 avril 2009 à 01:01
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-(
A voir également:

14 réponses

PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
16 avril 2009 à 00:57
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
gaerebut Messages postés 1017 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 22 novembre 2013 171
15 avril 2009 à 23:32
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
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
15 avril 2009 à 23:40
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
0
cheese42 Messages postés 860 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 10 octobre 2018 120
15 avril 2009 à 23:49
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à ^^

0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
16 avril 2009 à 00:18
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.

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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'); ?>"); 
0
Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
16 avril 2009 à 00:11
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 !
0
cheese42 Messages postés 860 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 10 octobre 2018 120
16 avril 2009 à 00:12
merci mais pareil ca me met les NaN a la place des chiffres :( merci quand même ^^
0
cheese42 Messages postés 860 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 10 octobre 2018 120
16 avril 2009 à 00:15
posotaz, merci, je vais bouquiner un peu alors ^^
le NaN est en reponse de Benj
0
cheese42 Messages postés 860 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 10 octobre 2018 120
16 avril 2009 à 00:24
ok, merci PhP ^^
0
Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
16 avril 2009 à 00:25
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 ^^
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
16 avril 2009 à 00:32
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
0
cheese42 Messages postés 860 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 10 octobre 2018 120
16 avril 2009 à 00:33
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 ^^
0
Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
16 avril 2009 à 00:52
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...
0
cheese42 Messages postés 860 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 10 octobre 2018 120
16 avril 2009 à 00:58
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^^
0
cheese42 Messages postés 860 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 10 octobre 2018 120
16 avril 2009 à 01:01
OOOOUUUUUUUUUUUAAAAAAAAAAIIIIIIIIIICCCCCCCCCCHHHHHHHHHHHHHH

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