Heure Serveur JavaScript

Mammouth du PHP | 959 Messages

09 mars 2008, 13:41

Bonjour :)

Je poste ici car cela fais pas mal de temps que je cherche la solution à mon problème qui n'avance pas :(

Le but est de fais une phrase :
Nous sommes Dimanche 09 Mars 2008 et il est 12h35min et 30 sec
Tout se qui est en italique est "temporaire" (puisque ça dois actualiser toutes les secondes

en javascript MAIS qui se base sur l'heure du serveur grâce à PHP....

voici mon script :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
<script language="javascript" type="text/javascript">
function showDate() {
		var jours = new Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");
		var mois = new Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
		
		var date = new Date(<?php echo date("Y, n, j, H, i, s"); ?>);
		var jourFR = jours[date.getDay()];
		var numero_jour = date.getDate();
		var moisFR = mois[date.getMonth()];
		var annee = date.getFullYear();
		
		var heures = date.getHours();
		if(heures < 10) {
			heures = "0" + heures;
		}
		
		var minutes = date.getMinutes();
		if(minutes < 10) {
			minutes = "0" + minutes;
		}
		
		var secondes = date.getSeconds();
		if(secondes < 10) {
			secondes = "0" + secondes;
		}
		
		document.getElementById("server_date").innerHTML = "Nous sommes " + jourFR + " " + numero_jour + " " + moisFR + " " + annee + " et il est " + heures + "h" + minutes + "min et " + secondes + " sec";
}
setInterval('showDate()', 1000);	
</script>
</head>

<body onload="showDate();">
<span id="server_date">Loading...</span>
</body>
</html>
mais bon.... si je poste ici c'est que ça ne marche pas....
voici les problèmes :
1) le plus gros, il m'affiche :
Nous sommes Mercredi 9 Avril 2008 et il est 12h35min et 30 sec
Donc le jour en texte, le jour en chiffre, et le mois en texte sont incorrect (ça ne viens pas du serveur, j'ai vérifier...)
2) bah... il s'actualise pas toute les secondes comme je l'ai prévu avec setInterval....


Voilà voilà ! je crois que j'ai tout dit ;)

Merci de votre aide ! :D

PS: j'ai rien dans ma cousole d'erreur de FireFox.... :?

Mammouth du PHP | 19672 Messages

09 mars 2008, 13:58

Ça ne peut pas marcher pour la simple raison qu'il y a une valeur PHP dans ton JavaScript. Or le PHP n'est pas interprété par le navigateur contrairement au JavaScript.

Pour que ce truc fonctionne, il faudrait que tu récupères l'heure du serveur via une requête AJAX. Donc il faudrait que ta fonction en appelle une autre qui elle va établir la requête XMLHTTPRequest nécessaire vers un script PHP prévu dans cet unique but coté serveur.

Fais quelques recherches sur le forum sur la base de ces informations, tu devrais trouver pas mal de matière.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 959 Messages

09 mars 2008, 14:05

Mais oui mais si je regarde le code source final (ctrl+u sous FF), j'ai :
var date = new Date(2008, 3, 9, 12, 49, 07);

le code php est remplacer par les valeurs....

Le PHP est exécuter coter serveur, donc il est remplacer... et puis le JS il est exécuter après le php (coter client) donc il devrai commencer a lire l'heure a partir des infos donner par php...

et en fait, avec ça, on commence la date à partir de là...

Pour AJAX, c'est pas un peu lourd surtout pour afficher une phrase ? :?

Mammouth du PHP | 19672 Messages

09 mars 2008, 15:18

Ben si tu veux une heure synchro sur celle du serveur, tu n'auras pas un choix considérable.

Or là, que se passe-t-il ? Tu fixes l'heure de départ coté serveur et ça arrive bien à l'affichage, ton point de départ est bien inscrit dans le JavaScript. Mais avec le setInterval, la fonction fait une récursion et cette heure n'est pas modifiée, elle est écrite en dur dans le code qu'a généré PHP. Donc si tu affiches ta page à midi pile, ton horloge affichée va obstinément rester bloquée à midi.

Donc ce qu'il faudrait corriger, c'est sortir cette heure générée de la fonction.

-1- Avant la fonction, tu définis l'heure en PHP;
-2- Dans la fonction, lors de la récursion, tu passes en paramètre l'heure mise à jour;
-3- Après la fonction : tu lances l'horloge (dans ton évènement onload) en passant en paramètre la variable JavaScript définie avant la fonction, c'est à dire l'heure de référence générée par PHP.

Mais il faut remettre à jour cette heure par incrémentation des secondes à chaque tour bien entendu, ce que ta fonction ne fait pas.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 959 Messages

09 mars 2008, 15:39

Le mot "synchro" est mal dit :P

en fait, ce n'est pas la peine que le JS se recale sur l'heure du serveur toutes les secondes...

Il faut juste que le JS commence à partir de l'heure du serveur puis il se débrouille tout seul :P

en cherchant, j'ai trouvé cela :
http://www.editeurjavascript.com/script ... s_2_26.php

preuve qu'il n'y est pas besoin d'AJAX 8-) :lol:

en fait, je ne serais comment modifier le script... :roll:

Mammouth du PHP | 19672 Messages

09 mars 2008, 19:20

C'est le même principe de programmation qu'en PHP. Il y a une chronologie dans le déroulement du programme. Tu dois donc décomposer le problème global en une succession de problèmes basiques et transformer ça en code par la suite. Au dé part, tu as une heure qui est définie coté serveur. Parfait, mais ça n'a rien à faire dans la fonction elle-même. Par contre pour la première exécution de la fonction, il faut lui transmettre ce point de départ. La fonction doit donc prendre ce point de départ, l'incrémenter d'une seconde et mettre à jour la variable qui est globale dans la mesure où elle est définie en dehors de la fonction, et ensuite afficher l'heure. Après le setInterval va relancer l'exécution toutes les secondes si c'est ce que tu as établi.

Donc à priori, il manque un élément : je dis ça à l'arrache, mais à mon sens il faut une autre fonction pour incrémenter l'heure de la variable.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 959 Messages

10 mars 2008, 19:23

Salut,

donc... se que j'ai fais, c'est que j'ai repris le script de l'editeur javascript, j'ai modifier, ça à l'air de marcher... :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
<script language="javascript" type="text/javascript">
		var jours = new Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");
		var mois = new Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
		
ejs_server_date = new Date(<?php echo date("Y, n, j, H, i, s"); ?>)
ejs_server_yea = ejs_server_date.getFullYear();
ejs_server_mon = ejs_server_date.getMonth();
ejs_server_day = ejs_server_date.getDate();
jourFR = jours[ejs_server_date.getDay()-3];
ejs_server_heu = ejs_server_date.getHours();
ejs_server_min = ejs_server_date.getMinutes();
ejs_server_sec = ejs_server_date.getSeconds();

function ejs_server_calc()
{
if (ejs_server_sec < 10)
	ejs_server_sec = "0"+Math.round(ejs_server_sec);
else if(ejs_server_sec >= 60)
	{
	ejs_server_sec = "00";
	ejs_server_min++;
	}
if (ejs_server_min < 10)
	ejs_server_min = "0"+Math.round(ejs_server_min);
else if(ejs_server_min >= 60)
	{
	ejs_server_min = "00";
	ejs_server_heu++;
	}
if (ejs_server_heu < 10)
	ejs_server_heu = "0"+Math.round(ejs_server_heu);
else if(ejs_server_heu >= 24)
	{
	ejs_server_heu = "00";
	}

ejs_server_texte = "Nous sommes " + jourFR + " " + ejs_server_day + " " + mois[ejs_server_mon-1] + " " + ejs_server_yea + " et il est " + ejs_server_heu + "h" + ejs_server_min + "min et " + ejs_server_sec + " sec";
if (document.getElementById){
	document.getElementById("ejs_server_heure").innerHTML=ejs_server_texte;
	}
ejs_server_sec++;
}
setInterval("ejs_server_calc()", 1000);
</script>
</head>

<body>
<div id="ejs_server_heure">Loading...</div>

</body>
</html>
Merci de me dire c'est il y a de petit truc qui vont pas ^^

Sinon, (c'est pas ça que je ne met pas encore résolu :D ) Je ne comprend pas POURQUOI je suis obliger de faire :
jourFR = jours[ejs_server_date.getDay()-3];
et
mois[ejs_server_mon-1]

Sinon, ne t'inquiète pas pour le nom des variables, j'ai modifier à la va vite ;)

Merci à toi

PS: désolé pour le tit retard :P

Mammouth du PHP | 959 Messages

16 mars 2008, 12:47

euuuuuuuuu........... ça me questionne toujours moi hein :D

Mammouth du PHP | 19672 Messages

16 mars 2008, 14:04

Console-toi, moi aussi. J'ai fouillé un peu la doc sans trouver la réponse à ce décalage de trois pour obtenir le bon jour :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 959 Messages

16 mars 2008, 15:57

ah

je ne suis pas le seul à pas comprendre....

c'est super bizarre quand même :?