Pour une raison quelconque, je convertis un format d'heure tel que: 03:30 to seconds 3*3600 + 30*60, now
. Je veux le reconvertir dans son premier (même) format. Comment cela pourrait-il être?
Ma tentative:
3*3600 + 30*60 = 12600
12600 / 60 = 210 / 60 = 3.5, floor(3.5) = 3 = hour
Maintenant, qu'en est-il des minutes?
Considérant que la valeur peut être comme 19:00 or 02:51.
Je pense que vous avez la photo.
Et au fait, comment convertir 2:0 for example to 02:00 using RegEx?
$hours = floor($seconds / 3600);
$mins = floor($seconds / 60 % 60);
$secs = floor($seconds % 60);
Si vous voulez obtenir le format de l'heure:
$timeFormat = sprintf('%02d:%02d:%02d', $hours, $mins, $secs);
Si vous savez que les heures seront inférieures à une heure, vous pouvez simplement utiliser les fonctions date()
ou $date->format()
.
$minsandsecs = date('i:s',$numberofsecs);
Cela fonctionne parce que l'époque système commence à minuit (le 1er janvier 1970, mais ce n'est pas important pour vous).
Si c'est une heure ou plus mais moins d'un jour, vous pouvez le sortir en format heure: minutes: secondes avec `
$hoursminsandsecs = date('H:i:s',$numberofsecs);
Pendant plus d'une journée, vous devrez utiliser le module pour calculer le nombre de jours, car c'est ici que la date de début de l'époque deviendrait pertinente.
J'espère que ça t'as aidé.
Peut-être que le moyen le plus simple est:
gmdate('H:i:s', $your_time_in_seconds);
Laisser $time
soit le temps en nombre de secondes.
$seconds = $time % 60;
$time = ($time - $seconds) / 60;
$minutes = $time % 60;
$hours = ($time - $minutes) / 60;
Maintenant, les heures, minutes et secondes sont dans $hours
, $minutes
et $seconds
respectivement.
Une autre solution qui vous donnera les jours, les heures, les minutes et les secondes pour une valeur de secondes écoulée:
function seconds_to_time($secs)
{
$dt = new DateTime('@' . $secs, new DateTimeZone('UTC'));
return array('days' => $dt->format('z'),
'hours' => $dt->format('G'),
'minutes' => $dt->format('i'),
'seconds' => $dt->format('s'));
}
print_r(seconds_to_time($seconds_value);
Une logique supplémentaire sera nécessaire pour les "jours" si le temps prévu est supérieur à un an. Utilisez str_pad () ou ltrim () pour ajouter/supprimer les zéros de gauche.
Si vous deviez le coder en dur, vous utiliseriez le module pour extraire l'heure comme d'autres l'ont suggéré.
Si vous renvoyez les secondes de la base de données MySQL, en supposant que vous n’avez pas besoin du format de données en secondes dans votre application, il existe un moyen beaucoup plus simple de le faire. Vous pouvez utiliser le fichier SEC_TO_TIME de MySQL. heure de retour au format hh: mm: ss.
Par exemple.
SELECT SEC_TO_TIME(my_seconds_field) AS my_timestring;
ITroubs answer ne traite pas les secondes restantes lorsque vous souhaitez utiliser ce code pour convertir un nombre de secondes au format d'heure tel que heures: minutes: secondes
Voici ce que j'ai fait pour régler ce problème: (Cela ajoute également un zéro non significatif à des minutes et des secondes à un chiffre)
$seconds = 3921; //example
$hours = floor($seconds / 3600);
$mins = floor(($seconds - $hours*3600) / 60);
$s = $seconds - ($hours*3600 + $mins*60);
$mins = ($mins<10?"0".$mins:"".$mins);
$s = ($s<10?"0".$s:"".$s);
$time = ($hours>0?$hours.":":"").$mins.":".$s;
$ time contiendra "1:05:21" dans cet exemple.
Désolé c'est trop tard mais peut-être utile
function mediaTimeDeFormater($seconds)
{
if (!is_numeric($seconds))
throw new Exception("Invalid Parameter Type!");
$ret = "";
$hours = (string )floor($seconds / 3600);
$secs = (string )$seconds % 60;
$mins = (string )floor(($seconds - ($hours * 3600)) / 60);
if (strlen($hours) == 1)
$hours = "0" . $hours;
if (strlen($secs) == 1)
$secs = "0" . $secs;
if (strlen($mins) == 1)
$mins = "0" . $mins;
if ($hours == 0)
$ret = "$mins:$secs";
else
$ret = "$hours:$mins:$secs";
return $ret;
}
echo mediaTimeDeFormater(216.064000);//3:36
quelque chose comme ça?
if(is_numeric($time)){
$value = array(
"years" => 0, "days" => 0, "hours" => 0,
"minutes" => 0, "seconds" => 0,
);
if($time >= 31556926){
$value["years"] = floor($time/31556926);
$time = ($time%31556926);
}
if($time >= 86400){
$value["days"] = floor($time/86400);
$time = ($time%86400);
}
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; }
récupéré à partir de: http://www.ckorp.net/sec2time.php
Utilisez modulo:
$hours = $time_in_seconds / 3600;
$minutes = ($time_in_seconds / 60) % 60;
juste un petit exemple supplémentaire
temps demandé en millisecondes
// ms2time( (microtime(true) - ( time() - Rand(0,1000000) ) ) );
// return array
function ms2time($ms){
$return = array();
// ms
$return['ms'] = (int) number_format( ($ms - (int) $ms), 2, '', '');
$seconds = (int) $ms;
unset($ms);
if ($seconds%60 > 0){
$return['s'] = $seconds%60;
} else {
$return['s'] = 0;
}
if ( ($minutes = intval($seconds/60))){
$return['m'] = $minutes;
}
if (isset($return['m'])){
$return['h'] = intval($return['m'] / 60);
$return['m'] = $return['m'] % 60;
}
if (isset($return['h'])){
$return['d'] = intval($return['h'] / 24);
$return['h'] = $return['h'] % 24;
}
if (isset($return['d']))
$return['mo'] = intval($return['d'] / 30);
foreach($return as $k=>$v){
if ($v == 0)
unset($return[$k]);
}
return $return;
}
// ms2time2string( (microtime(true) - ( time() - Rand(0,1000000) ) ) );
// return array
function ms2time2string($ms){
$array = array(
'ms' => 'ms',
's' => 'seconds',
'm' => 'minutes',
'h' => 'hours',
'd' => 'days',
'mo' => 'month',
);
if ( ( $return = ms2time($ms) ) && count($ms) > 0){
foreach($return as $key=>$data){
$return[$key] = $data .' '.$array[$key];
}
}
return implode(" ", array_reverse($return));
}
Voici une autre façon avec "0" en tête pour tous.
$secCount = 10000;
$hours = str_pad(floor($secCount / (60*60)), 2, '0', STR_PAD_LEFT);
$minutes = str_pad(floor(($secCount - $hours*60*60)/60), 2, '0', STR_PAD_LEFT);
$seconds = str_pad(floor($secCount - ($hours*60*60 + $minutes*60)), 2, '0', STR_PAD_LEFT);
C'est une adaptation de la réponse de Flaxious.