Funzione per verificare distanza di tempo non funziona: perchè?

Discussione in 'PHP' iniziata da Lighty, 9 Maggio 2014.

  1. Lighty

    Lighty Nuovo Utente

    Registrato:
    2 Aprile 2014
    Messaggi:
    29
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Salve a tutti!
    Ultimamente ho sviluppato una funzione che dovrebbe, in base a un input dell'ora e del giorno passato, verificare se è passato meno di un determinato numero di minuti. In caso positivo mi viene restituito true, altrimenti false.
    Perchè non funziona?
    PHP:
    <?php
    $data 
    date('Y.m.d');
    $ora date('H.i.s');

    function 
    CalcolaTempo($data$ora$minuti){
        
    $data_presente =  date('Y.m.d');
        
    $ora_presente date('H.i.s');
        
    $timestamp_presente mktime(substr($ora_presente02), substr($ora_presente32), substr($ora_presente62), substr($data_presente52), substr($data_presente82), substr($data_presente04));
        
    $timestamp mktime(substr($ora02), substr($ora32), substr($ora62), substr($data52), substr($data82), substr($data04));
        
    $result $timestamp_presente $timestamp;
        
    $seconds $minutes 60;
        if (
    $seconds >= $result){
            return 
    true;
        } else {
            return 
    false;}
    }

    ?>
    Ho tentato a fare la differenza tra due timestamp generati a pochi minuti di distanza (entrambi con impostazione di ora locale) per vedere come si comportano e tentare di riparare la funziona, ma il risultato è più di 4000! Perchè?
     
  2. borgo italia

    borgo italia Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    4 Febbraio 2008
    Messaggi:
    16.028
    Mi Piace Ricevuti:
    146
    Punteggio:
    63
    Sesso:
    Maschio
    Località:
    PR
    Home Page:
    ciao
    prova a fare queste correzioni
    PHP:
    <?php
    $data 
    date('Y.m.d');
    $ora date('H.i.s');

    function 
    CalcolaTempo($data$ora$minuti){
        
    //$data_presente =  date('Y.m.d');
        //$ora_presente = date('H.i.s');
        //$timestamp_presente = mktime(substr($ora_presente, 0, 2), substr($ora_presente, 3, 2), substr($ora_presente, 6, 2), substr($data_presente, 5, 2), substr($data_presente, 8, 2), substr($data_presente, 0, 4));
        
    $timestamp_presente time();
        
    $timestamp mktime(substr($ora02), substr($ora32), substr($ora62), substr($data52), substr($data82), substr($data04));
        
    $result $timestamp_presente $timestamp;
        
    //$seconds = $minutes * 60;//da dove salta fuori $minutes?
        
    $seconds $minuti 60;
        if (
    $seconds >= $result){
            return 
    true;
        } else {
            return 
    false;
        }
    }
    //....
    ?>
     
  3. Lighty

    Lighty Nuovo Utente

    Registrato:
    2 Aprile 2014
    Messaggi:
    29
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Ciao Borgo Italia,
    innanzitutto grazie per la risposta. Ho già provato con il metodo da te descritto ma non funziona neanche il quel modo: il risultato è uguale, anzi peggiore siccome le date che passo in input alla funzione sono con l'orario UTC+1, mentre il time() mi passa il timestamp con l'UTC.
    Ad ogni modo, ho risolto in modo diverso.
    Grazie comunque dell'aiuto!
     
  4. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.607
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    TN
    Ciao, sarei curioso di vedere la tua soluzione, intanto ne posto una per PHP 5.3.0 o superiore
    PHP:
    <?php

    $data 
    date("Y-m-d 06:00:00");

    function 
    CalcolaTempo($data) {

        
    $dta = new DateTime($data);
        
    $now = new DateTime(date("Y-m-d H:i:s"));
        
    $dif $now->diff($dta);

        
    $min $dif->i// minuti
        
    $min += $dif->60// ore

        
    echo "Sono passati $min minuti";
    }

    CalcolaTempo($data);
    Se necessita conteggiare anche i giorni basta aggiungere
    PHP:
    $min += $dif->1440// giorni
    e cosi via anche per gli eventuali mesi o anni
     
  5. Lighty

    Lighty Nuovo Utente

    Registrato:
    2 Aprile 2014
    Messaggi:
    29
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Ciao Criric,
    semplicemente ho sostituito mktime() con strtotime() riconfigurando le date e le ore sostituendo ai puntini gli slash alle date e i due punti alle ore, per far capire a strtotime() quale è una data e quale un'ora.
    Il resto... è uguale alla funzione di prima.
     
Sto caricando...

Condividi questa Pagina