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

Lighty

Nuovo Utente
2 Apr 2014
29
0
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_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 = mktime(substr($ora, 0, 2), substr($ora, 3, 2), substr($ora, 6, 2), substr($data, 5, 2), substr($data, 8, 2), substr($data, 0, 4));
	$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è?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.035
146
63
PR
www.borgo-italia.it
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($ora, 0, 2), substr($ora, 3, 2), substr($ora, 6, 2), substr($data, 5, 2), substr($data, 8, 2), substr($data, 0, 4));
    $result = $timestamp_presente - $timestamp;
    //$seconds = $minutes * 60;//da dove salta fuori $minutes?
	$seconds = $minuti * 60;
    if ($seconds >= $result){
        return true;
    } else {
        return false;
	}
}
//....
?>
 

Lighty

Nuovo Utente
2 Apr 2014
29
0
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!
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
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->h * 60; // ore

    echo "Sono passati $min minuti";
}

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

Lighty

Nuovo Utente
2 Apr 2014
29
0
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.