Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [PHP] orario aggiornato sul client

    Salve ragazzi,
    ho una pagina php nella quale mediante javascript stampo data e orario aggiornato in real time... secondo per secondo...

    Il problema è che io devo far stampare l'orario del server, e non quello del client! Mi sapreste consigliare qualche soluzione? Anche utilizzando la tecnologia AJAX di cui conosco le basi...

    Grazie

    Luca
    Luca

  2. #2
    è moltoooo semplice, e soprattutto non hai bisogno di ajax

    Quando crei la pagina PHP, usando il comando time, invii come variabile javascript la data in formato unixtime, per l'appunto

    Dopo di che, quando la devi fare visualizzare, instanzi un nuovo oggetto date a cui gli passi il valore acquisito da php incrementandolo però di uno ogni volta

    Per leggere l'orario puoi usare il metodo toTimeString() dell'oggetto Date
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3

    scusa ma...

    Ho seguito il tuo consiglio ma non riesco a stampare la data in formato corretto perchè la funzione time del php mi restituisce l'attuale data e orario misurata in numero di secondi dalla Unix Epoch (January 1 1970 00:00:00 GMT).

    Consigli?

    codice:
    <?PHP
    $time = time();
    $data = date("d-m-Y H:i", $time);
    ?>
    <script language="JavaScript" type="text/javascript">
    var counter = 0;
    function refresh() 
    {
    counter = counter + 1000;
    now = new Date(<?= $time ?> +counter);
    hour=now.getHours();
    min=now.getMinutes();
    sec=now.getSeconds();
    giorno = now.getDate();
    mese = now.getMonth();
    anno = now.getFullYear();
    if (min<=9) { min="0"+min; }
    if (sec<=9) { sec="0"+sec; }
    document.timeForm.field.value = giorno + "-" + mese + "-" + anno + " " +((hour<=9) ? "0"+hour : hour) + ":" + min + ":" + sec;
    setTimeout("refresh()", 1000);
    }
    window.onload = refresh;
    </script>
    <?= $data ?>
    <form name="timeForm">
    <input type=text" name="field" value="" size="30">
    </form>
    Giustamente mi segna orario partenza sbagliato ma si aggiorna correttamente ogni secondo!

    Help me

    Grazie
    Grazie
    Luca

  4. #4

    risolto così...

    Ho risolto!

    codice:
    <?PHP
    	$time = time();
    	$data = date("Y,m,d,H,i,s", $time);
    ?>
    <script language="JavaScript" type="text/javascript">
    
    var counter = 0;
    
    function refresh() 
    {
    	counter = counter + 1000;
      	now = new Date(<?=$data?>);//<?= $time ?> +counter);
      	now.setTime(now.getTime()+counter);
      	
    	hour=now.getHours();
    	min=now.getMinutes();
    	sec=now.getSeconds();
    	giorno = now.getDate();
    	mese = now.getMonth();
    	anno = now.getFullYear();
    
    	if (min<=9) { min="0"+min; }
    	if (sec<=9) { sec="0"+sec; }
     
    	document.timeForm.field.value = giorno + "-" + mese + "-" + anno + " " +((hour<=9) ? "0"+hour : hour) + ":" + min + ":" + sec;
    
    	setTimeout("refresh()", 1000);
    }
    window.onload = refresh;
    
    </script>
    Grazie mille per l'aiuto iniziale
    Luca

  5. #5

    uffà...

    Ho riscontrato altro problema!!!

    Su mozilla tutto ok,
    su IE (io ho vers. 7) il timer non si aggiorna ogni secondo

    counter = counter + 1000;
    forse 1000 non corrisponde ad 1 secondo? Ma possibile che sia solo su ie così?

    Help
    Luca

  6. #6
    ciao,

    a parte che questo è un problema di javascript, ci sono errori nel codice

    Date non accetta la data in secondi bensì in millisecondi!

    Di conseguenza se il counter è in base secondi come la variabile $data devi moltiplicare tutto per mille

    now = new Date(<?php echo time(); ?> * 1000);

    la riga
    counter = counter + 1000;

    trasformala in
    counter += 1000;

    elimina anche le due righe in testa di php

    inoltre devi separare l'aggiornamento della data dall'inizializza zione del ciclo!

    Devi mettere la riga
    now = new Date((<?php echo time(); ?> + counter) * 1000);

    all'esterno della funzione, magari tipo
    var startDate = new Date((<?php echo time(); ?> + counter) * 1000);

    (ricordati di cambiare il nome della variabile usato all'interno da now a startDate)

    +/- credo che sia corretta ora

    il problema è che se ci sono errori nel codice o nel funzionamento non lo vedi subito con IE7, dovrebbe comparirti un triangolino in basso a sinistra, sulla barra di stato

    Installa firefox con la web developer toolbar che puoi scaricare tra le estensioni e ti risolvi il problema
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.