Salve come da titolo esiste una funzione nativa per sommare le ore ?
Come ad esempio (1h e 30 minuti )+(1h e 30 minuti) =3 h
O scritto in codice
codice:$ora1 = 01:30; $ora2 = 01:30; $somma_ore=$ora1+$ora2; // Somma Ore deve risultare 3 h
Salve come da titolo esiste una funzione nativa per sommare le ore ?
Come ad esempio (1h e 30 minuti )+(1h e 30 minuti) =3 h
O scritto in codice
codice:$ora1 = 01:30; $ora2 = 01:30; $somma_ore=$ora1+$ora2; // Somma Ore deve risultare 3 h
Devi fare un software per sommare le ore dei dipendenti?
Potresti utilizzare le funzioni strtotime() e date().
Codice PHP:
$time="1:30";
$time= strtotime($time);
$time=strtotime('+1 hour', $time);
$time = date('H:i', $time);
CODENCODE \ Branding \ Design \ Marketing
www.codencode.it
Ci sono gli oggetti DateTime
http://php.net/manual/en/book.datetime.php
Ciao, spero possa esserti utile, anni fa ho dovuto scrivere un software per la gestione delle timbrature dell'azienda in cui lavoravo,
avevo fretta e ho scritto del codice banale ma funzionante.
Quello che segue e' solo indicativo, (non conosco ancora le relative funzioni PHP)
2 parametri : inizio e fine nel formato hh.mm - (sono certo che in PHO esistano delle funzioni
format attinenti le ore)
funzione che calcola i secondi che compongono il primo parametro
es. 10:15 - 17:10
stabilisco le ore e i minuti leggendo le posizioni del testo
le prime 2 rappresentano le ore le ultime due i minuti.
TOT = (17*3600)+(10*60) - ((10*3660) + (15*60))
poi HH=int(TOT/3600) MM=(tot-(HH*3600)/60)
ovviamente se l'orario comprende il turo di notte devi fare dei controlli in piu',
ad esempio che l'orario finale sia inferiore a quello iniziale e gestire la cosa.
Con due linee di codice in piu' controlli anche i secondi.
Non ricordo bene, ma se ti serve posso cercare i vecchi sorgenti VB, trattandosi di
un codice semplicissimo probabilmente potrei tradurlo in PHP persino io.
Ciao
Una possibilità.
DàCodice PHP:
<?php
function h100($var1) {
$var2 = str_replace(':','.',$var1);
return ((int) $var2) + ((($var2 - (int) $var2)) / 0.6);
}
function h60($var1) {
return str_replace('.',':',sprintf("%01.2f", ((int) $var1) + ((($var1 - (int) $var1)) * 0.6)));
}
print "Conversione in centesimi di ore :<br/>";
print h100('1:16');
print "<br/>";
print h100('1:35');
print "<hr/>";
print "Conversione da centesimi di ore in ore normali :<br/>";
print h60(h100('1:16')+h100('1:35'));
codice:Conversione in centesimi di ore : 1.2666666666667 1.5833333333333
Conversione da centesimi di ore in ore normali : 2:51
Ridatemi i miei 1000 posts persi !!!!
Non serve a nulla ottimizzare qualcosa che non funziona.
Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr
@badaze
Ottimo codice, che ho copiato nel mio toolbox di funzioni.
Quindi se ho ben capito la richiesta all'origine del post : calcolo del tempo intercorso tra
due orari, è sufficiente modificare l'ultima linea per avere la differenza invece della somma.
Ho provato ad aggiungere del codice che controlla una delle due eccezioni che mi vengono in mente:
orario che finisce il giorno successivo a quello di inizio [notturno], la seconda ovvero la necessita' di
gestire almeno due entrate/uscite giornaliere... un'altra volta.
Ho controllato con valori diversi e pare funzionare.Codice PHP:
<?phpfunction h100($var1) { $var2 = str_replace(':','.',$var1); return ((int) $var2) + ((($var2 - (int) $var2)) / 0.6);}
function h60($var1) { return str_replace('.',':',sprintf("%01.2f", ((int) $var1) + ((($var1 - (int) $var1)) * 0.6))); }$mezza = '24:00';$inizio='08:00';$fine = '16:00';
$prima =0;$seconda=0;
print "Ora inizio : " . h100($inizio) ;print "<hr/>";print "Ora fine " .h100($fine);print "<hr/>";
if ( h100($fine) < h100($inizio) ){ // calcolo fino alle 24 $prima=abs(h60(h100($inizio)-h100($mezza))) ;
// calcolo dalle 24 a fine turno $seconda =(24 - abs( h60(h100($fine)-h100($mezza)) ) ); print "ORARIO NOTTURNO"; print "<hr/>"; print "ore fino alla mezzanotte : " . $prima; print "<hr/>"; print "ore dopo la mezzanotte : " . $seconda; print "<hr/>"; print "ore totali : " . ($seconda + $prima); //print "Ore fine a mezzanotte : " . abs(h60(h100($inizio)-h100($mezza))); } else { print "ORARIO DIURNO"; print "<hr/>"; print " Ore TOTALI : " . ( h60(h100($fine)-h100($inizio))); print "<hr/>"; }
?>
Ultima modifica di curzio.maria; 06-05-2017 a 13:52
Utilizzando le funzioni di @badaze ho provato ad aggiungere del codice che controlla una delle due eccezioni che mi vengono in mente:
orario che finisce il giorno successivo a quello di inizio [notturno], la seconda ovvero la necessita' di
gestire almeno due entrate/uscite giornaliere... un'altra volta.
Ho controllato con valori diversi e pare funzionare.Codice PHP:
<?
// funzioni di @badaze
phpfunction h100($var1) {
$var2 = str_replace(':','.',$var1);
return ((int) $var2) + ((($var2 - (int) $var2)) / 0.6);}
function h60($var1)
{ return str_replace('.',':',sprintf("%01.2f", ((int) $var1) + ((($var1 - (int) $var1)) * 0.6))); }
// fine funzioni
$mezza = '24:00'; // potrebbe essere una costante
$inizio='08:00';
$fine = '16:00';
$prima =0;
$seconda=0;
print "Ora inizio : " . h100($inizio) ;
print "<hr/>";
print "Ora fine " .h100($fine);
print "<hr/>";
if ( h100($fine) < h100($inizio) )
{ // calcolo fino alle 24
$prima=abs(h60(h100($inizio)-h100($mezza))) ;
// calcolo dalle 24 a fine turno
$seconda =(24 - abs( h60(h100($fine)-h100($mezza)) ) );
print "ORARIO NOTTURNO";
print "<hr/>";
print "ore fino alla mezzanotte : " . $prima;
print "<hr/>";
print "ore dopo la mezzanotte : " . $seconda;
print "<hr/>";
print "ore totali : " . ($seconda + $prima);
}
else {
print "ORARIO DIURNO";
print "<hr/>"; print " Ore TOTALI : " . ( h60(h100($fine)-h100($inizio)));
print "<hr/>"; }
?>
Ultima modifica di curzio.maria; 06-05-2017 a 14:00