Je souhaite faire une comparaison de la date et heure du serveur avec celle du client au chargement d'une page.
Pour cela, après plusieurs heures de recherche et de tests je suis parvenu à faire afficher la date et l'heure du client obtenue au moment du chargement.
Voici le code que j'ai dégotté puis adapté :
$local = '
<script type="text/javascript">
<!--
var currentDate = new Date();
var twoDigitMonth=((currentDate.getMonth()+1)>=10)? (currentDate.getMonth()+1) : \'0\' + (currentDate.getMonth()+1);
var twoDigitDate=((currentDate.getDate())>=10)? (currentDate.getDate()) : \'0\' + (currentDate.getDate());
var twoDigitHours=((currentDate.getHours())>=10)? (currentDate.getHours()) : \'0\' + (currentDate.getHours());
var twoDigitMinutes=((currentDate.getMinutes())>=10)? (currentDate.getMinutes()) : \'0\' + (currentDate.getMinutes());
var twoDigitSeconds=((currentDate.getSeconds())>=10)? (currentDate.getSeconds()) : \'0\' + (currentDate.getSeconds());
document.write(currentDate.getFullYear() + "-" + twoDigitMonth + "-" + twoDigitDate + " " + twoDigitHours + ":" + twoDigitMinutes + ":" + twoDigitSeconds);
//-->
</script>
';
echo $local;
Pour la date et l'heure du serveur :
$server = date('Y-m-d H:i:s');
echo $server;
Le résultat s'affiche bien comem ceci :Local 2015-02-14 04:07:24
Server 2015-02-14 04:07:53
Là où ca se complique, c'est pour déterminer la différence.
Je pense qu'en faisait un strtotime sur chacune des date et heure, puis en faisant une soustraction, j'aurais la différence, en secondes.
Pour le serveur, pas de soucis , j'obtiens 1423883273 (pour l'exemple de date et heure ci dessus). La valeur change si je recharge la page, ce qui est logique.
En revanche, pour $local, strtotime refuse de me convertir quoi que ce soit.
La commande que j'utile est :
$local = strtotime($local);
J'ai cherché à comparer le format d'écriture obtenu par le javascript qui me donne la partie client. En faisant la commande suivante :
$local = 'AVANT'.$local.'APRES';
echo $local;
Je constate qu'il ya un espace qui se met avant et après la date et heure, comme ceci :
AVANT 2015-02-14 04:12:30 APRES
alors que je devrais obtenir
AVANT2015-02-14 04:12:30APRES
A noter que si je défini une valeur fixe à $local, par la ligne $local = 'POUET'; j'obtiens bien la ligne sans espace :
AVANTPOUETAPRES
Je pense que le script permettant d'obtenir la date et l'heure du client, ajoute un espace avant et après le résultat, et que surement cet espace empeche strtotime de focntionner.
Je me dis "Ok, bah je vais virer les espaces sur le résultat obtenu", et donc je rajoute la ligne :
$local = trim($local, " ");
Mais rien n'y fait, les espaces sons toujours présents Alors j'ai essayé des repalce, et autres formules glannées sur le net, mais rien à faire, cesz espaces ne veulent pas se barrer, et j'en arrive à un point que c'est en train de me rendre fou
Je m'en remets donc à votre aide, si vous avez une idée, elle serait vraiment la bienvenue
Désolé pour le roman mais pas facile à expliquer sans bien détailler ce que j'ai testé.
M'ci et bon ouiK !
Le Couin
Edition :
J'ai continué à cherché mais là je sature. J'ai modifié le code du script, je n'ai plus les espaces. Mais le problème n'est toujours pas résolu.
Mais le plus étrange c'est que si je tente d'explotier la valeur $local en tant que valeur d'un input, ca affiche le script au lieu de la valeur.
Code :
<script type="text/javascript">
var currentDate = new Date();
var twoDigitMonth=((currentDate.getMonth()+1)>=10)? (currentDate.getMonth()+1) : '0' + (currentDate.getMonth()+1);
var twoDigitDate=((currentDate.getDate())>=10)? (currentDate.getDate()) : '0' + (currentDate.getDate());
var twoDigitHours=((currentDate.getHours())>=10)? (currentDate.getHours()) : '0' + (currentDate.getHours());
var twoDigitMinutes=((currentDate.getMinutes())>=10)? (currentDate.getMinutes()) : '0' + (currentDate.getMinutes());
var twoDigitSeconds=((currentDate.getSeconds())>=10)? (currentDate.getSeconds()) : '0' + (currentDate.getSeconds());
var local=(currentDate.getFullYear()+"-"+twoDigitMonth+"-"+twoDigitDate+" "+twoDigitHours+":"+twoDigitMinutes+":"+twoDigitSeconds);
</script>
</head>
<body>
<?
$local = '<script>document.write(local);</script>';
echo $local;
$server = date('Y-m-d H:i:s');
// echo '<br>';
// echo 'Server : '.$server;
// $server = strtotime($server);
// echo '<br>';
// echo 'str server '.$server;
// echo '<br>';
// echo 'str local '.$local;
// $offset = $server - $local;
// echo '<br>';
// echo 'Offset = '.$offset;
?>
<form name="test" action="test.php" method="POST">
<input type="text" name="local" value="<?php echo $local;?>">
<br>
<input class="body" name="submit" type="submit" value="Go">
</form>
Résultat :J'ai une premier ligne qui affiche bien la date et l'heure du client mais la deuxième ligne, qui est une zone de texte, affiche
<script>document.write(local);</script>
Je pense que le strtotime essaye d'interpreter strtotime(<script>document.write(local);</script>) , ce qui forcément ,ne peut pas fonctionner.
Mais ca ne me dit pas pourquoi je n'obtiens pas la même chose sur les deux lignes selon commen j'exploite echo $local; .
Si vous avez des idées, car moi je sais plus où chercher là
M'ci