Differenza tra due ore

colomber

Utente Attivo
4 Dic 2012
232
1
18
Ho due orari devo trovare la differenza in ore e minuti.

PHP:
$primo = "16:49";
$secondo = "07:37":

$differenza= $primo - $secondo;


in questo modo il risultato é 9 ore ma non vengono presi in considerazione i minuti.


conoscete qualche funzione che compie questa operazione in modo completo?
 
Datetime is the way
PHP:
$primo = "16:49"; 
$secondo = "07:37"; 

$differenza= date_diff(date_create($primo),date_create($secondo)); 

echo $differenza->format("Ore: %H, Minuti: %i");
 
Ciao mi da questo errore:

Fatal error: Call to undefined function date_diff()


la mia versione di php é la 5.2 per cui la funzione é supportata

date_diff (PHP 5 >= 5.3.0)
 
Ultima modifica:
Datetime è supportata dalla 5.3, cioè la versione tutt'ora più valida del php


PS:
date_diff (PHP 5 >= 5.3.0)
Significa maggiore o uguale alla versione 5.3 del PHP5 :rolleyes:
 
Datetime è supportata dalla 5.3, cioè la versione tutt'ora più valida del php


PS:
date_diff (PHP 5 >= 5.3.0)
Significa maggiore o uguale alla versione 5.3 del PHP5 :rolleyes:



non esistono altre funzioni che fanno lo stesso lavoro e che sono supportate da php 5.2?
 
ciao
fatti una funzione del genere
PHP:
<?php
function differanza_data($prima,$seconda){
	//funzia se il separatore è : altrimenti modificare
	$p=explode(":", $prima);
	$s=explode(":", $seconda);
	$diff_sec=($p[0]*60 + $p[1])-($s[0]*60 + $s[1]);
	$dif_minuti=(int)($diff_sec/60);
	$dif_secondi=abs((int)($diff_sec%60));
	return "$dif_minuti:$dif_secondi";
}
//test****
$primo = "16:49"; 
$secondo = "07:37";
echo "diferenza tra $primo e $secondo = ".differanza_data($primo,$secondo)."<br />";

$primo = "07:37"; 
$secondo = "16:49";
echo "diferenza tra $primo e $secondo = ".differanza_data($primo,$secondo)."<br />";
$primo = "15:37"; 
$secondo = "16:22";
echo "diferenza tra $primo e $secondo = ".differanza_data($primo,$secondo)."<br />";
?>
 
La funzione é buona unico problema sono il formato dei minuti.

ad esempio 15 ore e 3 minuti esce fuori così:

15:3

potrebbe essere confuzo con 15 ore e 30 minuti, sarebbe meglio 15:03
 
La funzione é buona unico problema sono il formato dei minuti.

ad esempio 15 ore e 3 minuti esce fuori così:

15:3

potrebbe essere confuzo con 15 ore e 30 minuti, sarebbe meglio 15:03

Immagino che rispondo con un po di ritardo, ma prova ad modificare la funzione

PHP:
function differanza_data($prima,$seconda){ 
    //funzia se il separatore è : altrimenti modificare 
    $p=explode(":", $prima); 
    $s=explode(":", $seconda); 
    $diff_sec=($p[0]*60 + $p[1])-($s[0]*60 + $s[1]); 
    $dif_minuti=(int)($diff_sec/60); 
    $dif_secondi=abs((int)($diff_sec%60)); 
    $dif_minuti=($dif_minuti<10 ? "0" : "").$dif_minuti;
    $dif_secondi=($dif_secondi<10 ? "0" : "").$dif_secondi;
 
    return "$dif_minuti:$dif_secondi"; 
}

Fammi sapere:fonzie:
 
praticamente faccio una cosa di questo tipo ho due orari in formato timestap, li converto in orari normali, poi passo i due orari comprensivi di secondi alla funzione ho modificato la funzione in questo modo aggiungendo i secondi

return "$dif_minuti:$dif_secondi:$dif_secondi";


la differenza tra orari ore e minuti funziona tra secondi invece risulta errata


$a = date('H:i:s', $timestampa);
$b = date('H:i:s', $timestampb);

echo differanza_data($a,$b);
 
ciao
scusa una cosa che non ho capito:
tu immetti due tempi espressi in H.i:s e sin qui ci siamo il risultato della differenza deve essere espresso
in i:s (minuti e secondi)
oppure in H:i:s (ore minuti e secondi) ?
seconda cosa le due ore sono dello stesso giorno?
questo perchè se la prima data è minore della seconda es. 07:00:00 e 08:00:00 si intende generalmente dello stesso giorno e la differenza è 60:00,
ma se la prima è 08:00: e la seconda 07:00:00 la seconda si intende del giorno dopo quindi la differenza è 1380:00
 
confronto ore minuti secondi con ore minuti secondi, comunque sono ore dello stesso giorno, ma a me interessano solo le ore

borgo fai con calma quando hai tempo.


grazie
 
ciao
dimmi se ti va bene
PHP:
<?php
function differanza_data($prima,$seconda){
    //funzia se il separatore è : altrimenti modificare H:i:s  ore:minuti:secondi
    $p=explode(":", $prima);
    $s=explode(":", $seconda);
	$prima_sec=$p[0]*60*60 + $p[1]*60 + $p[2];
	$seconda_sec=$s[0]*60*60 + $s[1]*60 + $s[2];
	$diff_sec=abs($prima_sec - $seconda_sec);
	$dif_ore=(int)($diff_sec/3600);//3600= 60*60
	$resto=$diff_sec-$dif_ore*3600;
	$dif_minuti=(int)($resto/60);
	$dif_secondi=abs($diff_sec-$dif_ore*3600-$dif_minuti*60);
	$dif_ore=($dif_ore<10 ? "0" : "").$dif_ore;
	$dif_minuti=($dif_minuti<10 ? "0" : "").$dif_minuti;
    $dif_secondi=($dif_secondi<10 ? "0" : "").$dif_secondi; 
    return "$dif_ore:$dif_minuti:$dif_secondi";
}
//test****
$primo = "07:37:00";
$secondo = "08:37:00";
echo "diferenza tra $primo e $secondo = ".differanza_data($primo,$secondo)."<br />";
$primo = "07:37:00";
$secondo = "08:27:00";
echo "diferenza tra $primo e $secondo = ".differanza_data($primo,$secondo)."<br />";
$primo = "07:37:00"; 
$secondo = "08:27:25";
echo "diferenza tra $primo e $secondo = ".differanza_data($primo,$secondo)."<br />";
?>
output
diferenza tra 07:37:00 e 08:37:00 = 01:00:00
diferenza tra 07:37:00 e 08:27:00 = 00:50:00
diferenza tra 07:37:00 e 08:27:25 = 00:50:25

guarda che, come hai detto, ho considerato che le due ore siano sempre dello stesso giorno
cioè indifferente che tu metta prima es. 08:27:25 e poi 07:37:00 oppure 07:37:00 08:27:25
 

Discussioni simili