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

  • Creatore Discussione Creatore Discussione Lighty
  • Data di inizio Data di inizio

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è?
 
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;
	}
}
//....
?>
 
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!
 
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
 
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.
 

Discussioni simili