[PHP] sommare le ore

ste80

Nuovo Utente
25 Feb 2012
38
0
6
43
Brescia
eccomi,
ti anticipo che il risultato ottenuto dal codice mysqli e dal codice mysql è identico (ovviamente), così facendo però ottengo la somma delle ore che non è giusto....
PHP:
//somma delle ore--------------------------

//mysqli
$host = 'localhost';     //nome host
$username = 'root';      //user name
$password = '';  //password
$db = 'orari';
$tabella = 'programma';           // nome data base
$conn = mysqli_connect($host,$username,$password, $db) or die (mysql_error());

$r=mysqli_query($conn,"SELECT SUM(HOUR(ore)*3600) as H, SUM(MINUTE(ore)*60) as M, SUM(SECOND(ore)) as S  FROM $tabella");//qui metterai il tuo $tabella

$riga=mysqli_fetch_assoc($r);
echo "ore Totali: ".date('H:i:s',($riga['H']+$riga['M']+$riga['S']))."<br />";


//mysql
$r=mysql_query("SELECT ore FROM $tabella");
var_dump($r);//poi lo togli, dimmi se riporta FALSE o RESOURCE...
$somma=0;
while($riga=mysql_fetch_assoc($r)){
    $tempo=explode(":",$riga['ore']);
    $somma+=$tempo[0]*3600 + $tempo[1]*60+$tempo[2];
}
echo "ore Totali: ".date('H:i:s',$somma)."<br />";

/*
-----------------------------------------
Immagine.png


40 minuti più 30 minuti dovrebbe darmi 01:10:00
però se inserisco un valore alle H tutto è corretto usando mysql e modificando il *3600 in $tempo[2]*3600
PHP:
//mysql
$r=mysql_query("SELECT ore FROM $tabella");
var_dump($r);//poi lo togli, dimmi se riporta FALSE o RESOURCE...
$somma=0;
while($riga=mysql_fetch_assoc($r)){
    $tempo=explode(":",$riga['ore']);
    $somma+=$tempo[0] + $tempo[1]*60+$tempo[2]*3600;
}
echo "ore Totali: ".date('H:i:s',$somma)."<br />";
Immagine2.png

cosa c'è nel codice che non funziona?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ho capito dove è l'inghippo
l'errore non nasce dalla query ma da data
usando la funzione date la somma in secondi viene considerata la data in timestamp
ora la data in in timestamp = 0 corrisponde (parte da) alla data 1970/01/01 01:00:00 cioè ore 1 del 1 gennaio 1970
per cui mettendo la somma delle ore parte da 1 e non da zero
se provi
PHP:
<?php
$somma=4200;//00:30:00 + 00:40:00 -> 70 min -> 4200 sec
echo date('H:i:s',0)."<br>";//parte da (1970/01/01) 01:00:00
echo date('H:i:s',$somma)."<br>"; // 02:10:00
?>
quindi conviene fare una funzione
ecco lo script
PHP:
<?php
/*modificata tabella tbl e inseriti
1    00:30:00
2     00:40:00
3     00:00:00
4     00:00:00
*/
function trasform($t){
    $h=$t/3600;
    $ore=(int)$h;
    $min=(int)(($t%3600)/60);
    $sec=$t-$ore*3600-$min*60;
    $ore=str_pad($ore, 2, "0", STR_PAD_LEFT);// es da1 a 01, se al posto di 2 metti es 3 da 1 a 001 o da 12 a 012
    $min=str_pad($min, 2, "0", STR_PAD_LEFT);
    $sec=str_pad($sec, 2, "0", STR_PAD_LEFT);
    return "$ore:$min:$sec";
}

$host = 'localhost';     //nome host
$username = 'root';      //user name
$password = 'password';  //password
$db = 'prove';            // nome data base
$conn = mysqli_connect($host,$username,$password, $db) or die (mysql_error());
$r=mysqli_query($conn,"SELECT SUM(HOUR(ore)*3600) as H, SUM(MINUTE(ore)*60) as M, SUM(SECOND(ore)) as S  FROM tbl");//qui metterai il tuo $tabella
$riga=mysqli_fetch_assoc($r);
echo $riga['H']." ".$riga['M']." ".$riga['S']."<br>";
$somma=$riga['H']+$riga['M']+$riga['S'];
echo "$somma<br>";
echo "ore Totali: ".trasform($somma)."<br />";//output ore Totali: 01:10:00 OK
?>
 
  • Like
Reactions: ste80

ste80

Nuovo Utente
25 Feb 2012
38
0
6
43
Brescia
Ok, devo pravarla più tardi pultroppo, devo anche capire esattamente quello che mi hai scritto! Una domanda veloce, questo vale sia se uso mysql che mysqli?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
quello che ho scritto va bene per mysqli, non si può mischiare mysql con mysqli
se vuoi scrivere con le vecchie funzioni mysql devi cambiare la connessione e le varie funzioni, però come già detto le funzioni mysql sono obsolete, deprecate e in via di estinzione, quindi ti convine fare tutto in mysqli
 

ste80

Nuovo Utente
25 Feb 2012
38
0
6
43
Brescia
ESATTO FUNZIONA TUTTO!!!!! mitico!!! ti ringrazio tanto per la pazienza la disponibilità e la prontezza dei post. Ho visto un po in cosa differisce mysql e mysqli, devo approfondire ancora bene le argomentazioni poi io sono di 'coccio' quindi mi ci vuole tempo, intanto grazie ancora ;)
 
Discussioni simili
Autore Titolo Forum Risposte Data
M [PHP] Sommare ore e minuti PHP 22
M [PHP] Sommare due campi calcolati PHP 3
maxnegri Sommare i prezzi dei prodotti aggiunti al carrello di diverse aziende con Select sum php mysqli PHP 10
C [PHP] Sommare o sottrarre a ZERO PHP 7
elpirata [PHP][RISOLTO] Sommare gli importi estratti da un ciclo while PHP 3
L [PHP] Sommare campi e aggiornare tabella PHP 14
A Sommare campi stringa MYSQL PHP PHP 3
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8

Discussioni simili