Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Differenza Data e ora

  1. #1

    Differenza Data e ora

    Buon giorno, ho questo problemino, devo eseguire un controllo tra la data e ora che ho nel DB e quella odierna che gli passo tramite date("Y-m-d h:i:s").

    Ho visto tra i post, e nel manuale di php http://it.php.net/manual/it/function.mktime.php
    l'ho messo in pratica ( sicuramente sbagliando qualcosa) perchè le differenze non possono restituirmi sempre 0.
    codice:
    //estrapolo l'ora e la data di scadenza
    $que ="	SELECT  a.CdBando , a.StBando, b.CdBando, b.HhScad, b.DtScad FROM TBANBAN a, TBDTBAN b WHERE (a.CdBando = b.CdBando) and a.StBando = '$StBando'";
    
    //connessione ed esecuzione della query
    $Ris = mysql_query($que, $Connessione);
    
    //ciclo per estrapolare i valori
    while ($riga = cFetchAssoc($Ris)) {
    	$CcdBando = trim($riga['CdBando']); 
    	$StatoBando = trim($riga['StBando']); 
    	$HhScad = trim($riga['HhScad']);
    	$DataScad = trim($riga['DtScad']);
    }
    
    $d = date("Y-m-d h:i:s");//data e ora di oggi
    echo "Data e ora odierna: " . $d . "
    ";
    $DataOra = date($DataScad ." ".$HhScad);//data e ora della scadenza effettiva nella tabella
    echo "Scadenza Data e ora DB: " .$DataOra . "
    ";
    $differenza = ($DataOra - $d ) / 86400;
    echo $differenza ."
    ";//differenza restituita sempre 0
    
    //controllo per visualizzazione
    if ($StatoBando=="Ap11" && $differenza==0){
    //echo $StatoBando;
    break;
    }
    else{
    //altro
    }
    Quello che non capisco è perchè, se nella tabella ho questa data(domani) 2006-07-12 e oggi è 2006-06-12, non mi restituisce un valore diverso da 0.
    In pratica, dopo che è passato un mese, dalla data che è nella tabella, non deve visualizzare alcuni dati.

    Potete aiutarmi per favore?
    Grazie mille....

  2. #2
    Per fare la differenza devi avere le due date in UNIX timestamp, e non vedo il calcolo...

    codice:
    $dataDB=mktime($ore,$minuti,$secondi,$mese,$giorno,$anno);
    $dataOggi=mktime(date("H"),date("i"),date("s"),date("m"),date("d"),date("Y"));
    
    $differenza=floor(($dataOggi-$dataDB)/(60*60*24)); // hai la differenza in giorni



    Ciao!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  3. #3
    ti ringrazio, ho provato però una curiosità , nella tabella non ho un solo campo per l'ora e la data ma, ne ho due, quindi ti chiedo se faccio bene a fare cosi:

    codice:
    //$HhScad( scadenza in ore,minuti,secondi) - $DataScad( data in questo formato "Y-m-d")
    $dataDB=mktime($HhScad . $DataScad);//è giusto fare cosi?
    $dataOggi=mktime(date("H"),date("i"),date("s"),date("m"),date("d"),date("Y"));

    Grazie mille...

  4. #4
    innanzitutto dipende da che formato sono le tue variabili del db, poi a mktime tu devi passare 6 parametri singoli ( definiti a questa pagina ) , non la concatenazione di 2; quindi al massimo dovrai fare un explode sui tuoi campi e passare singolarmente le variabili



    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  5. #5
    allora, ho visto che il campo HhScad (ora scadenza) è varchar, mentre DtScad( data scadenza) è date.
    Nel campo ora, non sono previsti i secondi in pratica mi restituisce es. 12:00
    Comunque ho fatto cosi:
    codice:
    list($anno,$mese,$giorno) = explode("-", $DataScad); //prendo i valori singolarmente
    list($ore,$minuti) = explode(":", $HhScad); //prendo i valori singolarmente
    $dataDB=mktime($ore,$minuti,$anno,$mese,$giorno);
    echo $dataDB . "
    ";
    $dataOggi=mktime(date("H"),date("i"),date("Y"),date("m"),date("d"));
    echo $dataOggi . "
    ";
    $differenza=floor(($dataOggi-$dataDB)/(60*60*24)); // hai la differenza in giorni
    echo "Differenza: " . $differenza ."
    ";
    Data DB: 1165404806 (12:00 2006-12-06)
    Data Oggi: 1165401986 (11:15 2006-12-06)
    Differenza: -1

    è giusto quello che mi restituisce?
    Grazie ancora...

  6. #6
    no.


    è sbagliato il calcolo dello unix timestamp della dataDB, se non hai la variabile secondi passagli 0, nel tuo esempio passi 2006 ai secondi, è logico che poi risulti maggiore.


    Codice PHP:
    $dataDB=mktime($ore,$minuti,0,$mese,$giorno,$anno); 

    poi stai attento, perché sbagli l'ordine di passaggio dei parametri, guarda il mio esempio:
    Codice PHP:
    $dataOggi=mktime(date("H"),date("i"),date("s"),date("m"),date("d"),date("Y")); 
    ore - minuti - secondi - mese - giorno - anno, non puoi passarli nell'ordine che preferisci se no ovvio che il calcolo dell'mktime sballa, se mettono i parametri in un certo ordine non lo fanno per sport http://it.php.net/manual/it/function.mktime.php



    Ciao!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  7. #7
    fatto, però io la data scadenza nella tabella ce l'ho in questo formato 2006-12-06 mentre faccio cosi per l' mktime($ore,$minuti,0,$mese,$giorno,$anno);

    codice:
    list($ore,$minuti,$secondi) = explode(":", $HhScad); 
    list($mese,$giorno,$anno) = explode("-", $DataScad); 
    
    $dataDB=mktime($ore,$minuti,0,$mese,$giorno,$anno);

    Se cosi, il risultato è sempre -1!
    Scusami se ti disturbo più del dovuto...

  8. #8
    se la data nel db è così 2006-12-06 significa che hai aaaa-mm-gg e di conseguenza il list non lo puoi fare come hai fatto tu, ma:

    codice:
    list($anno,$mese,$giorno) = explode("-", $DataScad);
    stai facendo confusione con l'ordine della variabili...
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  9. #9
    quindi devo fare un conversione della data da:2006-12-06 in: 12-06-2006?
    o c'è un'altro modo?

  10. #10
    no...


    devi solo modificare il list come ti ho fatto vedere io. Facendo l'explode tu ottieni le variabili secondo la forma della variabile che "esplodi", quindi se hai aaaa-mm-gg, facendo l'explode passando "-" come divisore ottieni 3 variabili che saranno rispettivamente l'anno, il mese e il giorno e non può che essere altrimenti. E questo è il list con cui ottieni le variabili, poi dovrai passare le variabili all'mktime che le vuole per forza nell'ordine che ti ho fatto vedere prima ( e che c'è sul manuale ).
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

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.