Transforma secunde in H:M:S (Ore, Minute, Secunde)
Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
-
Pigmy
- Mesaje:11
Transforma secunde in H:M:S (Ore, Minute, Secunde)
Cod: Selectaţi tot
<?php
function Sec2Time($time)
{
if(is_numeric($time))
{
$value = array(
"hours" => 0,
"minutes" => 0,
"seconds" => 0,
);
if($time >= 3600)
{
$value["hours"] = floor($time/3600);
$time = ($time%3600);
}
if($time >= 60)
{
$value["minutes"] = floor($time/60);
$time = ($time%60);
}
$value["seconds"] = floor($time);
return (array) $value;
}else{
return (bool) FALSE;
}
}
?>
Bun, tot am incercat sa modific acest cod, incat sa fac ceva de genul:
Cod: Selectaţi tot
$timp = Transformare($row['timp']);
print("<td>$timp</td>");
Pe web in loc sa-mi apara 3660 secunde sa-mi apara: 1:01:00
Aveti idee cum sa fac? Am mai gasit un script de genu, dar nu transforma si in secunde, si as vrea sa inteleg si eu TRANSFORMAREA asta
MarPlo
Mesaje:4343
Salut
Acea functie, Sec2Time(), returneaza un Array cu 3 element, pt. Ora, Minute, Secunde; fiecare retinut intr-un element.
Ca sa intelegi, vezi exemplu de mai jos si explicatiile din el:
Cod: Selectaţi tot
<?php
// transoma secunde in Ore, Minute, Secunde (returnate intr-un Array)
function secToTime($time){
// daca parametru e un numar
if(is_numeric($time)){
// defineste Array-ul cu elementele ce vor fi returnate
$arr_mhs = array( 'hours'=>0, 'minutes'=>0, 'seconds'=>0 );
// daca $time e mai mare sau egal cu o ora (3600 secunde)
// preia in Array numar ore si lasa in $time restu de secunde
if($time >= 3600){
$arr_mhs['hours'] = floor($time/3600);
$time = ($time%3600);
}
// daca $time e mai mare sau egal cu un minut (60 secunde)
// preia numar minute in Array si lasa in $time restu de secunde
if($time >= 60){
$arr_mhs['minutes'] = floor($time/60);
if($arr_mhs['minutes']<10) $arr_mhs['minutes'] = '0'.$arr_mhs['minutes']; // adauga 0 inainte daca < 10
$time = ($time%60);
}
// adauga in Array si secundele ramase
$arr_mhs['seconds'] = floor($time);
if($arr_mhs['seconds']<10) $arr_mhs['seconds'] = '0'.$arr_mhs['seconds']; // adauga 0 inainte daca < 10
return $arr_mhs;
}
else return FALSE; // return False daca $time nu e numar
}
$timp = 3660; // nr. secunde
$ar_timp = secToTime($timp); // apeleaza functia ce separa Ore, Minute si secunde, si retine Array-ul returnat
// Defineste sirul ce va fi afisat, cu elementele din Array
$hms_timp = $ar_timp['hours']. ':'. $ar_timp['minutes']. ':'. $ar_timp['seconds'];
echo $hms_timp; // 1:01:00
?>
Pigmy
Mesaje:11
Da, bun...acuma inteleg cum se face, cum se transforma. Acuma vine greul, sa folosesc acest cod la baza de date.
Bun, de ce imi spune in casuta de TIMP "Array"?
Cod: Selectaţi tot
<?php
function secToTime($time)
{
if(is_numeric($time))
{
$arr_mhs = array( 'hours'=>0, 'minutes'=>0, 'seconds'=>0 );
if($time >= 3600)
{
$arr_mhs['hours'] = floor($time/3600);
$time = ($time%3600);
}
if($time >= 60)
{
$arr_mhs['minutes'] = floor($time/60);
if($arr_mhs['minutes']<10) $arr_mhs['minutes'] = '0'.$arr_mhs['minutes'];
$time = ($time%60);
}
$arr_mhs['seconds'] = floor($time);
if($arr_mhs['seconds']<10) $arr_mhs['seconds'] = '0'.$arr_mhs['seconds']; // adauga 0 inainte daca < 10
return $arr_mhs;
}else{
return FALSE;
}
$HMS = $hours . ':'. $minutes . ':'. $seconds;
return $HMS;
}
echo "<html>
while($row = mysql_fetch_array($getdata))
{
$timp = secToTime($row['timp']);
print("<td>$timp</td>");
}
echo "</html>"
?>
MarPlo
Mesaje:4343
Pigmy scrie:Bun, de ce imi spune in casuta de TIMP "Array"?
Fiindca secToTime() returneaza un Array cu 3 elemente, pt. Ore, Minute, Secunde.
Este explicat in comentariile din exemplu de mai sus.
Daca nu stii cum se lucreaza cu Array si cu functii, vezi lectiile de PHP-MySQL de pe site.
Pigmy
Mesaje:11
Am reusit. Acuma vine ultima intrebare legat de acest scriptulet.
Intrebarea mea este urmatoarea:
Cum pot sa fac "return" de genu:
Cod: Selectaţi tot
$HMSTIMP = $hours . ':' . $minutes . ':' . $seconds;
return $HMSTIMP;
El returneaza la ce am mai sus, eu vreau sa fac ceva de genu:
Cod: Selectaţi tot
if($HMSTIMP >= 3600)
{
$HMSTIMP = $hours . ':' . $minutes . ':' . $seconds;
}
if($HMSTIMP >= 60)
{
$HMSTIMP = $minutes . ':' . $seconds;
}
return $HMSTIMP;
MarPlo
Mesaje:4343
Vezi urmatorul exemplu, e aceeasi functie, putin modificata. Aceasta returneaza direct un sir cu Ore:Minute:Secunde.
Varianta cu Array e buna mai ales cand iti trebuie doar o parte din aceste trei date, si le poti lua din array pe fiecare.
Cod: Selectaţi tot
<?php
// transoma secunde in Ore, Minute, Secunde (returnate intr-un Array)
function secToTime($time){
// daca parametru e un numar
if(is_numeric($time)){
// defineste Array-ul cu elementele ce vor fi returnate
$arr_mhs = array( 'hours'=>0, 'minutes'=>0, 'seconds'=>0 );
// daca $time e mai mare sau egal cu o ora (3600 secunde)
// preia in Array numar ore si lasa in $time restu de secunde
if($time >= 3600){
$arr_mhs['hours'] = floor($time/3600);
$time = ($time%3600);
}
// daca $time e mai mare sau egal cu un minut (60 secunde)
// preia numar minute in Array si lasa in $time restu de secunde
if($time >= 60){
$arr_mhs['minutes'] = floor($time/60);
if($arr_mhs['minutes']<10) $arr_mhs['minutes'] = '0'.$arr_mhs['minutes']; // adauga 0 inainte daca < 10
$time = ($time%60);
}
// adauga in Array si secundele ramase
$arr_mhs['seconds'] = floor($time);
if($arr_mhs['seconds']<10) $arr_mhs['seconds'] = '0'.$arr_mhs['seconds']; // adauga 0 inainte daca < 10
return implode(':', $arr_mhs); returneaza un sir cu Ore:Minute:Secunde
}
else return 'Parametru incorect, trebuie un numar de secunde';
}
$timp = 7890; // nr. secunde
$hms_timp = secToTime($timp); // apeleaza functia ce returneaza Ore:Minute:Secunde
echo $hms_timp; // 2:11:30
?>
- Ca sa fie la minute 08, daca minute nu e mai mare decat 10, se poate asa:
Pigmy
Mesaje:11
Am inteles, am reusit acuma. Mai e o nelamurire, fac un nou topic.
Multumesc inca-o data MarPlo pentru ajutor.