Jawaban:
Anda dapat menggunakan gmdate()
fungsi ini:
echo gmdate("H:i:s", 685);
datetime
... jadi jika kita mengharapkan hasil> 24 jam itu tidak akan berfungsi. Juga jika kita memerlukan beberapa hasil negatif (misalnya bekerja dengan offset) itu tidak akan berfungsi. -1
untuk rincian detail
echo gmdate("z H:i:s", 685);
z adalah jumlah hari dalam tahun dimulai dengan 0. Anda jelas dapat meninjau manual tanggal php untuk memenuhi kebutuhan spesifik Anda.
Satu jam adalah 3600sec, satu menit adalah 60sec jadi mengapa tidak:
<?php
$init = 685;
$hours = floor($init / 3600);
$minutes = floor(($init / 60) % 60);
$seconds = $init % 60;
echo "$hours:$minutes:$seconds";
?>
yang menghasilkan:
$ php file.php
0:11:25
(Saya belum menguji sebanyak ini, jadi mungkin ada kesalahan dengan lantai atau lebih)
printf("%02d:%02d:%02d", $hours, $minutes, $seconds);
sprintf
untuk mengembalikan nilai alih-alih mencetaknya.
ini dia
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
return ($t< 0 ? '-' : '') . sprintf("%02d%s%02d%s%02d", floor(abs($t)/3600), $f, (abs($t)/60)%60, $f, abs($t)%60); }
Gunakan fungsi gmdate()
hanya jika detik kurang dari 86400
(1 hari) :
$seconds = 8525;
echo gmdate('H:i:s', $seconds);
# 02:22:05
Lihat: gmdate ()
Konversi detik ke format dengan 'kaki' tanpa batas * :
$seconds = 8525;
$H = floor($seconds / 3600);
$i = ($seconds / 60) % 60;
$s = $seconds % 60;
echo sprintf("%02d:%02d:%02d", $H, $i, $s);
# 02:22:05
Lihat: floor () , sprintf () , operator aritmatika
Contoh penggunaan DateTime
ekstensi:
$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
Lihat: DateTime :: __ construct () , DateTime :: memodifikasi () , clone , sprintf ()
Rentang-838:59:59
838:59:59
contoh MySQL dari hasil dibatasi dengan tipe data TIME, yaitu dari hingga :
SELECT SEC_TO_TIME(8525);
# 02:22:05
Lihat: SEC_TO_TIME
Contoh PostgreSQL:
SELECT TO_CHAR('8525 second'::interval, 'HH24:MI:SS');
# 02:22:05
Solusi lain digunakan gmdate
, tetapi gagal dalam kasus tepi di mana Anda memiliki lebih dari 86400 detik. Untuk menyiasatinya, kita cukup menghitung sendiri jumlah jam, lalu gmdate
menghitung detik yang tersisa menjadi menit / detik.
echo floor($seconds / 3600) . gmdate(":i:s", $seconds % 3600);
Input: 6030
Keluaran:1:40:30
Input: 2000006030
Keluaran:555557:13:50
// 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
gmdate("H:i:s", no_of_seconds);
Tidak akan memberikan waktu dalam H:i:s
format jika no_of_seconds
lebih dari 1 hari (detik dalam sehari).
Ini akan mengabaikan nilai hari dan hanya memberiHour:Min:Seconds
Sebagai contoh:
gmdate("H:i:s", 89922); // returns 0:58:42 not (1 Day 0:58:42) or 24:58:42
Berikut ini adalah satu liner yang menangani detik negatif dan bernilai lebih dari 1 hari.
sprintf("%s:%'02s:%'02s\n", intval($seconds/60/60), abs(intval(($seconds%3600) / 60)), abs($seconds%60));
Sebagai contoh:
$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));
keluaran: -26: 03: 04
Jika Anda tidak menyukai jawaban yang diterima atau yang populer, cobalah yang ini
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
tulis fungsi seperti ini untuk mengembalikan array
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;
}
maka cukup panggil fungsi seperti ini:
secondsToTime(100);
output adalah
Array ( [h] => 0 [m] => 1 [s] => 40 )
Lihat:
/**
* 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;
}
Coba ini:
date("H:i:s",-57600 + 685);
Diambil dari
http://bytes.com/topic/php/answers/3917-seconds-converted-hh-mm-ss
Fungsi gmtdate () tidak berfungsi untuk saya karena saya melacak jam kerja di proyek dan jika lebih dari 24 jam, Anda mendapatkan jumlah yang tersisa setelah 24 jam dikurangi. Dengan kata lain 37 jam menjadi 13 jam. (semua seperti yang dinyatakan di atas oleh Glavic - terima kasih atas contoh Anda!) Yang ini bekerja dengan baik:
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
Fungsi ini bermanfaat, Anda dapat memperluasnya:
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;}
Solusi dari: https://gist.github.com/SteveJobzniak/c91a8e2426bac5cb9b0cbc1bdbc45e4b
Kode ini menghindari sebanyak mungkin pemanggilan fungsi yang membosankan dan pembangunan string sepotong demi sepotong, dan fungsi besar dan besar yang dibuat orang untuk ini.
Ini menghasilkan format "1h05m00s" dan menggunakan nol terkemuka untuk menit dan detik, selama komponen waktu non-nol mendahului mereka.
Dan itu melompati semua komponen utama yang kosong untuk menghindari memberi Anda informasi yang tidak berguna seperti "0h00m01s" (sebagai gantinya itu akan muncul sebagai "1s").
Contoh hasil: "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'; }
Jika Anda ingin membuat kode lebih pendek (tetapi kurang dapat dibaca), Anda dapat menghindari $converted
array dan meletakkan nilai-nilai secara langsung dalam panggilan sprintf (), sebagai berikut:
$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'; }
Durasi harus 0 atau lebih tinggi di kedua potongan kode di atas. Durasi negatif tidak didukung. Tetapi Anda dapat menangani durasi negatif dengan menggunakan kode alternatif berikut sebagai gantinya:
$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"
gmdate()
peretasan bahkan lebih pendek dari ini, tetapi hanya mendukung durasi hingga 24 jam. Apa pun di atas 24 jam akan gagal jika Anda menggunakan trik gmdate!
Cara sederhana untuk menggunakan DateTime untuk ini adalah:
$time = 60; //sec.
$now = time();
$rep = new DateTime('@'.$now);
$diff = new DateTime('@'.($now+$time));
$return = $diff->diff($rep)->format($format);
//output: 01:04:65
Ini adalah solusi sederhana yang memberi Anda kemampuan untuk menggunakan format Metode DateTime.
Di java Anda bisa menggunakan cara ini.
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;
}
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);
}
Yah saya membutuhkan sesuatu yang akan mengurangi detik menjadi beberapa jam menit dan detik, tetapi akan melebihi 24 jam, dan tidak mengurangi turun menjadi beberapa hari.
Berikut adalah fungsi sederhana yang berfungsi. Anda mungkin dapat memperbaikinya ... Tapi ini dia:
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;
}
$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;
Untuk mengubahnya menjadi fungsi:
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;
}
Jika Anda perlu melakukannya dalam javascript, Anda dapat melakukannya hanya dalam satu baris kode seperti yang dijawab di sini. Konversi detik menjadi HH-MM-SS dengan JavaScript . Ganti DETIK dengan apa yang ingin Anda konversi.
var time = new Date(SECONDS * 1000).toISOString().substr(11, 8);
Jika Anda ingin membuat string durasi audio / video seperti YouTube, dll. Anda dapat melakukannya:
($seconds >= 60) ? ltrim(gmdate("H:i:s", $seconds), ":0") : gmdate("0:s", $seconds)
Akan mengembalikan string seperti:
55.55 => '0:55'
100 => '1:40'
Mungkin tidak akan bekerja dengan baik untuk waktu> = 24 jam.
Ini cara yang bagus untuk melakukan itu:
function time_converter($sec_time, $format='h:m:s'){
$hour = intval($sec_time / 3600) >= 10 ? intval($sec_time / 3600) : '0'.intval($sec_time / 3600);
$minute = intval(($sec_time % 3600) / 60) >= 10 ? intval(($sec_time % 3600) / 60) : '0'.intval(($sec_time % 3600) / 60);
$sec = intval(($sec_time % 3600) % 60) >= 10 ? intval(($sec_time % 3600) % 60) : '0'.intval(($sec_time % 3600) % 60);
$format = str_replace('h', $hour, $format);
$format = str_replace('m', $minute, $format);
$format = str_replace('s', $sec, $format);
return $format;
}
Kalau-kalau ada orang lain yang mencari fungsi sederhana untuk mengembalikan ini diformat dengan baik (saya tahu itu bukan format OP meminta), ini adalah apa yang baru saja saya buat. Berkat @mughal untuk kode ini didasarkan pada.
function format_timer_result($time_in_seconds){
$time_in_seconds = ceil($time_in_seconds);
// Check for 0
if ($time_in_seconds == 0){
return 'Less than a second';
}
// Days
$days = floor($time_in_seconds / (60 * 60 * 24));
$time_in_seconds -= $days * (60 * 60 * 24);
// Hours
$hours = floor($time_in_seconds / (60 * 60));
$time_in_seconds -= $hours * (60 * 60);
// Minutes
$minutes = floor($time_in_seconds / 60);
$time_in_seconds -= $minutes * 60;
// Seconds
$seconds = floor($time_in_seconds);
// Format for return
$return = '';
if ($days > 0){
$return .= $days . ' day' . ($days == 1 ? '' : 's'). ' ';
}
if ($hours > 0){
$return .= $hours . ' hour' . ($hours == 1 ? '' : 's') . ' ';
}
if ($minutes > 0){
$return .= $minutes . ' minute' . ($minutes == 1 ? '' : 's') . ' ';
}
if ($seconds > 0){
$return .= $seconds . ' second' . ($seconds == 1 ? '' : 's') . ' ';
}
$return = trim($return);
return $return;
}
Siapa pun yang mencari ini di masa depan, ini memberikan format yang diminta oleh poster awal.
$init = 685;
$hours = floor($init / 3600);
$hrlength=strlen($hours);
if ($hrlength==1) {$hrs="0".$hours;}
else {$hrs=$hours;}
$minutes = floor(($init / 60) % 60);
$minlength=strlen($minutes);
if ($minlength==1) {$mins="0".$minutes;}
else {$mins=$minutes;}
$seconds = $init % 60;
$seclength=strlen($seconds);
if ($seclength==1) {$secs="0".$seconds;}
else {$secs=$seconds;}
echo "$hrs:$mins:$secs";
<?php
$time=3*3600 + 30*60;
$year=floor($time/(365*24*60*60));
$time-=$year*(365*24*60*60);
$month=floor($time/(30*24*60*60));
$time-=$month*(30*24*60*60);
$day=floor($time/(24*60*60));
$time-=$day*(24*60*60);
$hour=floor($time/(60*60));
$time-=$hour*(60*60);
$minute=floor($time/(60));
$time-=$minute*(60);
$second=floor($time);
$time-=$second;
if($year>0){
echo $year." year, ";
}
if($month>0){
echo $month." month, ";
}
if($day>0){
echo $day." day, ";
}
if($hour>0){
echo $hour." hour, ";
}
if($minute>0){
echo $minute." minute, ";
}
if($second>0){
echo $second." second, ";
}
seconds
kedate/time
atau ke sejumlah Jam: Menit: Detik?