Différence de calcul entre PHP et JS

Résolu/Fermé
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 - Modifié par heliconius le 3/06/2015 à 23:35
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 - 3 juin 2015 à 23:54
Bonsoir,

Je voudrais faire une extension de l'objet javascript Date() pour retourner une valeur identique à celle de la fonction time() de PHP.

en PHP: la fonction time() retourne le nombre de secondes écoulées entre le 01/01/1970 00:00:00 et maintenant
en JS: la méthode getTime() de l'objet Date retourne le nombre de millisecondes écoulées entre le 01/01/1970 00:00:00 et maintenant

Je trouve une différence (variable) qui tourne régulièrement autour des 13 mn / 14 mn. Cette différence est-elle due à MON calcul ou est-elle due à la manière (probablement différente) dont PHP et JS calculent cette valeur ?

PS: Je sais que l'exécution d'un script prend du temps qui peut se mesurer en millième de secondes et vu que c'est l'unité utilisée dans ces calculs, il faudrait peut-être en tenir compte. 1 ou 2 millième de seconde d'une instruction à l'autre, je pourrais admettre cette différence ; mais une différence de 13 mn, j'aimerais comprendre...

Si quelqu'un a une idée ou a trouvé une erreur, je suis preneur...

Merci.

<html>

<head>
<title>time()</title>
<script language="javascript"type="text/javascript">
   Date.prototype.mytime = function() {
	return Math.floor(this.getTime()/1000);
   }
</script>
</head>

<body>

<!--
// PHP time()    = temps en secondes depuis le 01/01/1970 00:00:00
// JS .getTime() = temps en millisecondes depuis le 01/01/1970 00:00:00
// -->

<script language="javascript"type="text/javascript">

var pnow, jnow, diff;

pnow = <?php echo time(); ?>; // now en PHP en s
jnow = new Date().mytime();   // now en JS en s

document.write("php_now: " + pnow + "<br/>");
document.write("js_now: " + jnow + "<br/>");

diff = pnow-jnow;

document.write("différence: " + diff + " s");
document.write(", soit: " + (diff/60) + " mn");

</script>

</body>

</html>




Un problème sans solution est un problème mal posé. (Albert Einstein)
A voir également:

1 réponse

heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 137
3 juin 2015 à 23:54
Bonsoir,

je suis désolé d'avoir posé la question en ayant, par étourderie, "court-circuité" un détail :

PHP est un langage "côté serveur" ; c'est à dire que le calcul de "maintenant" se fait SUR LE SERVEUR
Javascript est un langage "côté client" ; c'est à dire que le calcul de "maintenant se fait SUR LA MACHINE CLIENTE.

Après vérification des heures, j'ai constaté un écart d'environ 14 mn entre l'heure du serveur et l'heure de mon PC.

le script suivant permet de constater que les calculs en PHP et en Javascript donnent les mêmes résultats.

Ouf !

(Merci quand même)

<html>

<head>
<title>time()</title>
<script language="javascript"type="text/javascript">
   Date.prototype.mytime = function() {
	return Math.floor(this.getTime()/1000);
   }
</script>
</head>

<body>

<h2>PHP</h2>

<?php
// PHP time()    = temps en secondes depuis le 01/01/1970 00:00:00
// JS .getTime() = temps en millisecondes depuis le 01/01/1970 00:00:00
// JS .mytime()  = temps en secondes depuis le 01/01/1970 00:00:00 [ext. obj Date()]

$d1 = mktime(0, 0, 0, 1, 1, 2015);      // 01/01/2015
$d2 = mktime(0, 0, 0, 11, 2, 2015);     // 02/11/2015
$d3 = $d2-$d1;
echo "Différence: $d3 s<hr>";
?>

<h2>Javascript</h2>

<script language="javascript"type="text/javascript">
var d1, d2, d3;

d1 = new Date(2015, 0, 1, 0, 0, 0, 0);  // 01/01/2015
d2 = new Date(2015, 10, 2, 0, 0, 0, 0); // 02/11/2015
d3 = d2.mytime() - d1.mytime();
document.write("Différence: " + d3 + " s");

</script>

</body>

</html>

0