Obtenir l'heure "absolue" [JS]

Mysterious_fea Messages postés 406 Statut Membre -  
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Je souhaiterai savoir s'il est possible d'obtenir par Javascript l'heure absolue en France (GMT + 2), et pas l'heure de l'horloge Windows du visiteur.
Merci
Configuration: Windows Vista
Firefox 2.0.0.10

7 réponses

  1. Mysterious_fea Messages postés 406 Statut Membre 35
     
    Up please !!
    0
  2. Mysterious_fea Messages postés 406 Statut Membre 35
     
    SVP!
    0
  3. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
     
    salut,

    dans ce cas, il faut demander l'info à un serveur donc passer par XMLHTTPRequest (Ajax).
    et répondre avec un script PHP.
    0
    1. Mysterious_fea Messages postés 406 Statut Membre 35
       
      Tu aurais une idée de code, enfin dans les grandes lignes, STP ?
      Merci
      0
      1. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923 > Mysterious_fea Messages postés 406 Statut Membre
         
        regarde , y en a pour tous les niveaux.

        après je ne sais pas si il vaut mieux interroger directement un serveur qui donne l'heure (comme ceux qui permettent de synchroniser les PC, ça doit bien exister mais je n'en connais pas) ou si tu interroges direct le serveur qui héberge ton site avec PHP.

        je suppose que la seconde méthode est beaucoup plus facile.
        0
      2. Mysterious_fea Messages postés 406 Statut Membre 35 > Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Je n'ai pas trouvé mon bonheur dans ces tutos, car cela parle surtout du XML.
        Pour ce qui est du PHP, je vais utiliser :
        <?php
        $heure = date("H");
        $min = date("i");
        echo $heure.'h'.$min;
        ?>

        Je souhaiterais donc appeler ce fichier PHP avec du XMLHTTPRequest... Comment le faire ?
        Merci
        0
  4. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
     
    salut,

    car cela parle surtout du XML
    et alors ?! XHTML est du XML…
    et de toute façon, 'httpRequest.responseText' contient la réponse du serveur au format texte, tu peux en faire ce que tu veux.

    admettons que tu nommes ton script 'request.php'
    il faut lui ajouter l'envoi du 'Content Type' en premier :
    header('Content-Type: text/html; charset=ISO-8859-1');


    en JS tu dois avoir un code du style :
    function getXHR()
    {
    	var xhr=null;
    	if( window.XMLHttpRequest )
    	{
    		xhr = new XMLHttpRequest();
    	}
    	else if( window.ActiveXObject )
    	{
    		try
    		{
    			xhr = new ActiveXObject( "Msxml2.XMLHTTP" );
    		}
    		catch( e )
    		{
    			try
    			{
    				xhr = new ActiveXObject( "Microsoft.XMLHTTP" );
    			}
    			catch( e1 )
    			{
    				xhr = null;
    			}
    		}
    	}
    	else
    	{
    		alert( "Votre navigateur ne supporte pas les objets XMLHTTPRequest." );
    	}
    	return xhr;
    }
    function updateTime( httpRequest ) 
    {
        if ( httpRequest.readyState == 4 )
        {
            if ( httpRequest.status == 200 )
            {
                document.getElementById( "container" ).innerHTML = httpRequest.responseText;
            }
            else
            {
                document.getElementById( "container" ).innerHTML = 'Un probl&egrave;me est survenu avec la requ&ecirc;te.';
            }
        }
    }
    function displayTime()
    {
    	xhr = getXHR();
    	if( xhr )
    	{
    		xhr.open( 'GET', 'http://www.tonsite/request.php', true );
    		xhr.onreadystatechange = function() { updateTime( xhr ); };
    		xhr.send( '' )
    	}
    }

    il te reste juste à appeler la fonction JS depuis ton document HTML et d'y mettre un containeur :
    <body onload="displayTime();">
    	<p id="container"></p>
    </body>
    0
    1. Mysterious_fea Messages postés 406 Statut Membre 35
       
      Merci beaucoup, je vais essayer ça !
      A + !
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mysterious_fea Messages postés 406 Statut Membre 35
     
    Bon il intègre bien le php mais il merde avec le header, il me dit
    Cannot modify header information - headers already sent by
    . Donc quand j'enlève le header ça me l'inclue mais ça se met pas à jour en temps réel, il faut rafraîchir. Voilà mes codes :
    heure.php
    <?php
    header('Content-Type: text/html; charset=ISO-8859-1');
    $heure = date("H");
    $min = date("i");
    echo $heure.'h'.$min;
    ?>

    heure.js
    function getXHR()
    {
    	var xhr=null;
    	if( window.XMLHttpRequest )
    	{
    		xhr = new XMLHttpRequest();
    	}
    	else if( window.ActiveXObject )
    	{
    		try
    		{
    			xhr = new ActiveXObject( "Msxml2.XMLHTTP" );
    		}
    		catch( e )
    		{
    			try
    			{
    				xhr = new ActiveXObject( "Microsoft.XMLHTTP" );
    			}
    			catch( e1 )
    			{
    				xhr = null;
    			}
    		}
    	}
    	else
    	{
    		alert( "Votre navigateur ne supporte pas les objets XMLHTTPRequest." );
    	}
    	return xhr;
    }
    function updateTime( httpRequest ) 
    {
        if ( httpRequest.readyState == 4 )
        {
            if ( httpRequest.status == 200 )
            {
                document.getElementById( "heure" ).innerHTML = httpRequest.responseText;
            }
            else
            {
                document.getElementById( "heure" ).innerHTML = 'Un probl&egrave;me est survenu avec la requ&ecirc;te.';
            }
        }
    }
    function displayTime()
    {
    	xhr = getXHR();
    	if( xhr )
    	{
    		xhr.open( 'GET', 'http://www.eficoach.com/essai/heure.php', true );
    		xhr.onreadystatechange = function() { updateTime( xhr ); };
    		xhr.send( '' )
    	}
    }

    index.php
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    	<title>Exemple 1</title>
    <script type="text/javascript" src="heure.js"></script>
    </head>
    <body onload="displayTime();">
    	<p id="heure"></p>
    
    </body>
    </html>

    Merci
    0
  7. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
     
    salut,

    ça se met pas à jour en temps réel, il faut rafraîchir
    du coup ça perd tout son intérêt !!!

    mais tu veux simplement afficher l'heure une fois ou l'actualiser en temps réel ?
    comme tu parlais de JS au départ je pensais que tu voulais faire une horloge sur ta page avec l'heure serveur.
    si tu veux juste horodater la page, pas besoin d'Ajax.

    sinon, le 'header' doit être envoyé avant quoi que ce soit d'autre, il ne doit même pas y avoir un espace avant l'ouverture de la balise PHP.
    0
    1. Mysterious_fea Messages postés 406 Statut Membre 35
       
      Non non en effet je souhaiterais une mise à jour en temps réel, sinon j'aurais simplement fait appel au PHP.
      J'ai enlevé l'espace et plus d'erreur PHP mais toujours pas de mise à jour en temps réel. Je ne vois pas où tu as réglé le temps entre 2 rafraichissement sur le js...
      0
      1. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923 > Mysterious_fea Messages postés 406 Statut Membre
         
        ah !!!
        bon on est bien d'accord !!!

        mais je n'avais pas mis de temps de rafraichissement auto mais seulement le premier appel !
        je pensais que ça tu l'avais déjà !

        suffit de l'ajouter à la fonction JS, pour qu'elle se rappelle elle-même.
        tu lances une première fois dans le 'onload' et après elle débrouille.

        je regarde pour le code et te tiens au jus !
        0
  8. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
     
    mais j'ai peur que les envois se chevauchent en cas de latence avec la réponse.
    function displayTime()
    {
    	xhr = getXHR();
    	if( xhr )
    	{
    		xhr.open( 'GET', 'http://www.eficoach.com/essai/heure.php', true );
    		xhr.onreadystatechange = function() { updateTime( xhr ); };
    		xhr.send( '' )
    		setTimeout(displayTime(),1000);
    	}
    }
    0