wake-up-neo.com

Sekunden in Stunde: Minute: Sekunde umrechnen

Ich muss Sekunden in "Stunde: Minute: Sekunde" umrechnen.

Zum Beispiel: "685" in "00:11:25" konvertiert

Wie kann ich das erreichen?

290
M.E

Sie können die Funktion gmdate() verwenden:

echo gmdate("H:i:s", 685);
665
animuson

Eine Stunde ist 3600 Sekunden, eine Minute ist 60 Sekunden. Warum also nicht:

<?php

$init = 685;
$hours = floor($init / 3600);
$minutes = floor(($init / 60) % 60);
$seconds = $init % 60;

echo "$hours:$minutes:$seconds";

?>

was produziert:

$ php file.php
0:11:25

(Ich habe nicht so viel getestet, daher könnten Fehler mit dem Fußboden oder so auftreten)

153
Aif

bitte schön

function format_time($t,$f=':') // t = seconds, f = separator 
{
  return sprintf("%02d%s%02d%s%02d", floor($t/3600), $f, ($t/60)%60, $f, $t%60);
}

echo format_time(685); // 00:11:25
69
nathan

Funktion gmdate() verwenden nur wenn Sekunden weniger als 86400 (1 Tag) sind :

$seconds = 8525;
echo gmdate('H:i:s', $seconds);
# 02:22:05

Siehe: gmdate ()

Demo ausführen


Sekunden nach Fuß umwandeln keine Begrenzung* :

$seconds = 8525;
$H = floor($seconds / 3600);
$i = ($seconds / 60) % 60;
$s = $seconds % 60;
echo sprintf("%02d:%02d:%02d", $H, $i, $s);
# 02:22:05

Siehe: floor () , sprintf () , arithmetische Operatoren

Demo ausführen


Beispiel für die Verwendung der Erweiterung DateTime:

$seconds = 8525;
$zero    = new DateTime("@0");
$offset  = new DateTime("@$seconds");
$diff    = $zero->diff($offset);
echo sprintf("%02d:%02d:%02d", $diff->days * 24 + $diff->h, $diff->i, $diff->s);
# 02:22:05

Siehe: DateTime :: __ construct () , DateTime :: modify () , Klon , sprintf ()

Demo ausführen


MySQL-Beispiel der Bereich des Ergebnisses ist auf den Datentyp TIME beschränkt, der von -838:59:59 bis 838:59:59 reicht. :

SELECT SEC_TO_TIME(8525);
# 02:22:05

Siehe: SEC_TO_TIME

Demo ausführen


PostgreSQL-Beispiel:

SELECT TO_CHAR('8525 second'::interval, 'HH24:MI:SS');
# 02:22:05

Demo ausführen

60
Glavić

Andere Lösungen verwenden gmdate, schlagen jedoch in Edge-Fällen fehl, in denen Sie mehr als 86400 Sekunden haben. Um dies zu umgehen, können wir einfach die Anzahl der Stunden selbst berechnen und dann gmdate die verbleibenden Sekunden in Minuten/Sekunden berechnen lassen.

echo floor($seconds / 3600) . gmdate(":i:s", $seconds % 3600);

Eingabe: 6030 Ausgabe: 1:40:30

Eingabe: 2000006030 Ausgabe: 555557:13:50

27
RaDim
// TEST
// 1 Day 6 Hours 50 Minutes 31 Seconds ~ 111031 seconds

$time = 111031; // time duration in seconds

$days = floor($time / (60 * 60 * 24));
$time -= $days * (60 * 60 * 24);

$hours = floor($time / (60 * 60));
$time -= $hours * (60 * 60);

$minutes = floor($time / 60);
$time -= $minutes * 60;

$seconds = floor($time);
$time -= $seconds;

echo "{$days}d {$hours}h {$minutes}m {$seconds}s"; // 1d 6h 50m 31s
16
mughal
gmdate("H:i:s", no_of_seconds);

Gibt keine Zeit im H:i:s-Format an, wenn no_of_seconds größer als 1 Tag ist (Sekunden pro Tag).
Der Tageswert wird vernachlässigt und es wird nur Hour:Min:Seconds angegeben.

Zum Beispiel:

gmdate("H:i:s", 89922); // returns 0:58:42 not (1 Day 0:58:42) or 24:58:42
7
Vikash Kumar

Hier ist ein One-Liner, der negative Sekunden und Sekunden im Wert von mehr als einem Tag verarbeitet.

sprintf("%s:%'02s:%'02s\n", intval($seconds/60/60), abs(intval(($seconds%3600) / 60)), abs($seconds%60));

Zum Beispiel:

$seconds= -24*60*60 - 2*60*60 - 3*60 - 4; // minus 1 day 2 hours 3 minutes 4 seconds
echo sprintf("%s:%'02s:%'02s\n", intval($seconds/60/60), abs(intval(($seconds%3600) / 60)), abs($seconds%60));

ausgänge: -26: 03: 04

6
Benjamin

schreibfunktion wie diese, um ein Array zurückzugeben

function secondsToTime($seconds) {

  // extract hours
  $hours = floor($seconds / (60 * 60));

  // extract minutes
  $divisor_for_minutes = $seconds % (60 * 60);
  $minutes = floor($divisor_for_minutes / 60);

  // extract the remaining seconds
  $divisor_for_seconds = $divisor_for_minutes % 60;
  $seconds = ceil($divisor_for_seconds);

  // return the final array
  $obj = array(
      "h" => (int) $hours,
      "m" => (int) $minutes,
      "s" => (int) $seconds,
   );

  return $obj;
}

dann einfach die Funktion so aufrufen:

secondsToTime(100);

ausgabe ist

Array ( [h] => 0 [m] => 1 [s] => 40 )
5

Sehen:

    /** 
     * Convert number of seconds into hours, minutes and seconds 
     * and return an array containing those values 
     * 
     * @param integer $inputSeconds Number of seconds to parse 
     * @return array 
     */ 

    function secondsToTime($inputSeconds) {

        $secondsInAMinute = 60;
        $secondsInAnHour  = 60 * $secondsInAMinute;
        $secondsInADay    = 24 * $secondsInAnHour;

        // extract days
        $days = floor($inputSeconds / $secondsInADay);

        // extract hours
        $hourSeconds = $inputSeconds % $secondsInADay;
        $hours = floor($hourSeconds / $secondsInAnHour);

        // extract minutes
        $minuteSeconds = $hourSeconds % $secondsInAnHour;
        $minutes = floor($minuteSeconds / $secondsInAMinute);

        // extract the remaining seconds
        $remainingSeconds = $minuteSeconds % $secondsInAMinute;
        $seconds = ceil($remainingSeconds);

        // return the final array
        $obj = array(
            'd' => (int) $days,
            'h' => (int) $hours,
            'm' => (int) $minutes,
            's' => (int) $seconds,
        );
        return $obj;
    }

Von: Sekunden in Tage, Stunden, Minuten und Sekunden umrechnen

4
FooBar

Diese Funktion kann nützlich sein, Sie können sie erweitern:

function formatSeconds($seconds) {

if(!is_integer($seconds)) {
    return FALSE;
}

$fmt = "";

$days = floor($seconds / 86400);
if($days) {
    $fmt .= $days."D ";
    $seconds %= 86400;
}

$hours = floor($seconds / 3600);
if($hours) {
    $fmt .= str_pad($hours, 2, '0', STR_PAD_LEFT).":";
    $seconds %= 3600;
}

$mins = floor($seconds / 60 );
if($mins) {
    $fmt .= str_pad($mins, 2, '0', STR_PAD_LEFT).":";
    $seconds %= 60;
}

$fmt .= str_pad($seconds, 2, '0', STR_PAD_LEFT);

return $fmt;}
3
AMCoded

Die Funktion gmtdate () hat für mich nicht funktioniert, da ich die Stunden verfolgt habe, die an einem Projekt gearbeitet wurden. Wenn es über 24 Stunden dauert, wird der verbleibende Betrag nach 24 Stunden abgezogen. Mit anderen Worten: 37 Stunden werden 13 Stunden. (alles wie oben von Glavic erwähnt - danke für Ihre Beispiele!) Das hat gut funktioniert:

Convert seconds to format by 'foot' no limit :
$seconds = 8525;
$H = floor($seconds / 3600);
$i = ($seconds / 60) % 60;
$s = $seconds % 60;
echo sprintf("%02d:%02d:%02d", $H, $i, $s);
# 02:22:05
3
TotalPro

In Java können Sie diesen Weg verwenden.

   private String getHmaa(long seconds) {
    String string;
    int hours = (int) seconds / 3600;
    int remainder = (int) seconds - hours * 3600;
    int mins = remainder / 60;
    //remainder = remainder - mins * 60;
    //int secs = remainder;

    if (hours < 12 && hours > 0) {
        if (mins < 10) {
            string = String.valueOf((hours < 10 ? "0" + hours : hours) + ":" + (mins > 0 ? "0" + mins : "0") + " AM");
        } else {
            string = String.valueOf((hours < 10 ? "0" + hours : hours) + ":" + (mins > 0 ? mins : "0") + " AM");
        }
    } else if (hours >= 12) {
        if (mins < 10) {
            string = String.valueOf(((hours - 12) < 10 ? "0" + (hours - 12) : ((hours - 12) == 12 ? "0" : (hours - 12))) + ":" + (mins > 0 ? "0" + mins : "0") + ((hours - 12) == 12 ? " AM" : " PM"));
        } else {
            string = String.valueOf(((hours - 12) < 10 ? "0" + (hours - 12) : ((hours - 12) == 12 ? "0" : (hours - 12))) + ":" + (mins > 0 ? mins : "0") + ((hours - 12) == 12 ? " AM" : " PM"));
        }
    } else {
        if (mins < 10) {
            string = String.valueOf("0" + ":" + (mins > 0 ? "0" + mins : "0") + " AM");
        } else {
            string = String.valueOf("0" + ":" + (mins > 0 ? mins : "0") + " AM");
        }
    }
    return string;
}
2
Billah

Wenn Sie die akzeptierte Antwort oder die Popularität nicht einmal mögen, versuchen Sie es mit dieser

function secondsToTime($seconds_time)
{
    if ($seconds_time < 24 * 60 * 60) {
        return gmdate('H:i:s', $seconds_time);
    } else {
        $hours = floor($seconds_time / 3600);
        $minutes = floor(($seconds_time - $hours * 3600) / 60);
        $seconds = floor($seconds_time - ($hours * 3600) - ($minutes * 60));
        return "$hours:$minutes:$seconds";
    }
}

secondsToTime(108620); // 30:10:20
2
Eranda

Versuche dies:

date("H:i:s",-57600 + 685);

Genommen von
http://bytes.com/topic/php/answers/3917-seconds-converted-hh-mm-ss

2
Kerry Jones

Lösung von: https://Gist.github.com/SteveJobzniak/c91a8e2426bac5cb9b0cbc1bdbc45e4b

Hier ist eine sehr saubere und kurze Methode!

Dieser Code vermeidet die langwierigen Funktionsaufrufe und das stückweise Erstellen von Saiten so weit wie möglich, und die großen und sperrigen Funktionen, die die Leute dafür machen.

Es erzeugt das "1h05m00s" -Format und verwendet führende Nullen für Minuten und Sekunden, solange ihnen eine andere Zeitkomponente als Null vorausgeht.

Und es werden alle leeren führenden Komponenten übersprungen, um zu vermeiden, dass Sie unnötige Informationen wie "0h00m01s" erhalten (stattdessen werden diese als "1s" angezeigt).

Beispielergebnisse: "1s", "1m00s", "19m08s", "1h00m00s", "4h08m39s".

$duration = 1; // values 0 and higher are supported!
$converted = [
    'hours' => floor( $duration / 3600 ),
    'minutes' => floor( ( $duration / 60 ) % 60 ),
    'seconds' => ( $duration % 60 )
];
$result = ltrim( sprintf( '%02dh%02dm%02ds', $converted['hours'], $converted['minutes'], $converted['seconds'] ), '0hm' );
if( $result == 's' ) { $result = '0s'; }

Wenn Sie den Code noch kürzer machen möchten (aber weniger lesbar), können Sie das $converted-Array vermeiden und die Werte stattdessen direkt in den sprintf () - Aufruf einfügen:

$duration = 1; // values 0 and higher are supported!
$result = ltrim( sprintf( '%02dh%02dm%02ds', floor( $duration / 3600 ), floor( ( $duration / 60 ) % 60 ), ( $duration % 60 ) ), '0hm' );
if( $result == 's' ) { $result = '0s'; }

Die Dauer muss in beide der obigen Codeteile 0 oder höher sein. Negative Dauern werden nicht unterstützt. Sie können jedoch mit negativen Dauern umgehen, indem Sie stattdessen den folgenden alternativen Code verwenden:

$duration = -493; // negative values are supported!
$wasNegative = FALSE;
if( $duration < 0 ) { $wasNegative = TRUE; $duration = abs( $duration ); }
$converted = [
    'hours' => floor( $duration / 3600 ),
    'minutes' => floor( ( $duration / 60 ) % 60 ),
    'seconds' => ( $duration % 60 )
];
$result = ltrim( sprintf( '%02dh%02dm%02ds', $converted['hours'], $converted['minutes'], $converted['seconds'] ), '0hm' );
if( $result == 's' ) { $result = '0s'; }
if( $wasNegative ) { $result = "-{$result}"; }
// $result is now "-8m13s"
1
ThatBigGuy

DateTime kann dazu einfach verwendet werden:

    $time = 60; //sec.
    $now = time();
    $rep = new DateTime('@'.$now);
    $diff = new DateTime('@'.($now+$time));
    $return = $diff->diff($rep)->format($format);

    //output:  01:04:65

Es ist eine einfache Lösung, mit der Sie die Formatmethode von DateTime verwenden können.

1
predkony

Nun, ich brauchte etwas, das Sekunden in Stunden, Minuten und Sekunden reduzieren würde, aber 24 Stunden überschreiten würde und nicht weiter in Tage.

Hier ist eine einfache Funktion, die funktioniert. Sie können es wahrscheinlich verbessern ... Aber hier ist es:

function formatSeconds($seconds)
{
    $hours = 0;$minutes = 0;
    while($seconds >= 60){$seconds -= 60;$minutes++;}
    while($minutes >= 60){$minutes -=60;$hours++;}
    $hours = str_pad($hours, 2, '0', STR_PAD_LEFT);
    $minutes = str_pad($minutes, 2, '0', STR_PAD_LEFT);
    $seconds = str_pad($seconds, 2, '0', STR_PAD_LEFT);
    return $hours.":".$minutes.":".$seconds;
}
0
Paul Ishak

Wenn Sie das in Javascript tun müssen, können Sie es in nur einer Codezeile tun, wie hier beantwortet. Konvertieren Sie Sekunden in HH-MM-SS mit JavaScript . Ersetzen SieSEKUNDENdurch das, was Sie konvertieren möchten.

var time = new Date(SECONDS * 1000).toISOString().substr(11, 8);
0
icynets
function timeToSecond($time){
    $time_parts=explode(":",$time);
    $seconds= ($time_parts[0]*86400) + ($time_parts[1]*3600) + ($time_parts[2]*60) + $time_parts[3] ; 
    return $seconds;
}

function secondToTime($time){
    $seconds  = $time % 60;
    $seconds<10 ? "0".$seconds : $seconds;
    if($seconds<10) {
        $seconds="0".$seconds;
    }
    $time     = ($time - $seconds) / 60;
    $minutes  = $time % 60;
    if($minutes<10) {
        $minutes="0".$minutes;
    }
    $time     = ($time - $minutes) / 60;
    $hours    = $time % 24;
    if($hours<10) {
        $hours="0".$hours;
    }
    $days     = ($time - $hours) / 24;
    if($days<10) {
        $days="0".$days;
    }

    $time_arr = array($days,$hours,$minutes,$seconds);
    return implode(":",$time_arr);
}
0
anu g prem
$given = 685;

 /*
 * In case $given == 86400, gmdate( "H" ) will convert it into '00' i.e. midnight.
 * We would need to take this into consideration, and so we will first
 * check the ratio of the seconds i.e. $given:$number_of_sec_in_a_day
 * and then after multiplying it by the number of hours in a day (24), we
 * will just use "floor" to get the number of hours as the rest would
 * be the minutes and seconds anyways.
 *
 * We can also have minutes and seconds combined in one variable,
 * e.g. $min_sec = gmdate( "i:s", $given );
 * But for versatility sake, I have taken them separately.
 */

$hours = ( $given > 86399 ) ? '0'.floor( ( $given / 86400 ) * 24 )-gmdate( "H", $given ) : gmdate("H", $given );

$min = gmdate( "i", $given );

$sec = gmdate( "s", $given );

echo $formatted_string = $hours.':'.$min.':'.$sec;

Um es in eine Funktion umzuwandeln:

function getHoursFormat( $given ){

 $hours = ( $given > 86399 ) ? '0'.floor( ( $given / 86400 ) * 24 )-gmdate( "H", $given ) : gmdate("H", $given );

 $min = gmdate( "i", $given );

 $sec = gmdate( "s", $given );

 $formatted_string = $hours.':'.$min.':'.$sec;

 return $formatted_string;

}
0
Brajinder Singh