Câu trả lời:
Bạn có thể sử dụng gmdate()
chức năng:
echo gmdate("H:i:s", 685);
datetime
... vì vậy nếu chúng ta mong đợi kết quả> 24 giờ thì nó sẽ không hoạt động. Ngoài ra nếu chúng ta cần một số kết quả âm tính (ví dụ như làm việc với offset) thì nó sẽ không hoạt động. -1
để biết thêm thông tin chi tiết
echo gmdate("z H:i:s", 685);
z là số ngày trong năm bắt đầu bằng 0. Bạn rõ ràng có thể xem lại hướng dẫn sử dụng ngày php để đáp ứng nhu cầu cụ thể của bạn.
Một giờ là 3600 giây, một phút là 60 giây vậy tại sao không:
<?php
$init = 685;
$hours = floor($init / 3600);
$minutes = floor(($init / 60) % 60);
$seconds = $init % 60;
echo "$hours:$minutes:$seconds";
?>
sản xuất:
$ php file.php
0:11:25
(Tôi đã không kiểm tra điều này nhiều, vì vậy có thể có lỗi với sàn hoặc hơn)
printf("%02d:%02d:%02d", $hours, $minutes, $seconds);
sprintf
để trả về giá trị thay vì in nó.
bạn đi đây
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); }
Chỉ sử dụng chức năng gmdate()
nếu giây nhỏ hơn 86400
(1 ngày) :
$seconds = 8525;
echo gmdate('H:i:s', $seconds);
# 02:22:05
Xem: gmdate ()
Chuyển đổi giây thành định dạng theo 'chân' không giới hạn * :
$seconds = 8525;
$H = floor($seconds / 3600);
$i = ($seconds / 60) % 60;
$s = $seconds % 60;
echo sprintf("%02d:%02d:%02d", $H, $i, $s);
# 02:22:05
Xem: floor () , sprintf () , toán tử số học
Ví dụ sử dụng DateTime
phần mở rộng:
$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
Xem: DateTime :: __ construc () , DateTime :: redirect () , clone , sprintf ()
MySQL dụ loạt các kết quả bị hạn chế với các kiểu dữ liệu TIME, mà là từ -838:59:59
để838:59:59
:
SELECT SEC_TO_TIME(8525);
# 02:22:05
Xem: SEC_TO_TIME
Ví dụ PostgreSQL:
SELECT TO_CHAR('8525 second'::interval, 'HH24:MI:SS');
# 02:22:05
Các giải pháp khác sử dụng gmdate
, nhưng thất bại trong các trường hợp cạnh mà bạn có hơn 86400 giây. Để giải quyết vấn đề này, chúng ta chỉ cần tự tính toán số giờ, sau đó cho phép gmdate
tính các giây còn lại thành phút / giây.
echo floor($seconds / 3600) . gmdate(":i:s", $seconds % 3600);
Đầu vào: 6030
Đầu ra:1:40:30
Đầu vào: 2000006030
Đầu ra: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);
Sẽ không cho thời gian ở H:i:s
định dạng nếu no_of_seconds
lớn hơn 1 ngày (giây trong một ngày).
Nó sẽ bỏ qua giá trị ngày và chỉ cung cấpHour:Min:Seconds
Ví dụ:
gmdate("H:i:s", 89922); // returns 0:58:42 not (1 Day 0:58:42) or 24:58:42
Dưới đây là một lớp lót xử lý số giây âm và số giây đáng giá hơn 1 ngày.
sprintf("%s:%'02s:%'02s\n", intval($seconds/60/60), abs(intval(($seconds%3600) / 60)), abs($seconds%60));
Ví dụ:
$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));
đầu ra: -26: 03: 04
viết hàm như thế này để trả về một mảng
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;
}
sau đó chỉ cần gọi hàm như thế này:
secondsToTime(100);
đầu ra là
Array ( [h] => 0 [m] => 1 [s] => 40 )
Nếu bạn không thích câu trả lời được chấp nhận hoặc câu trả lời phổ biến, thì hãy thử câu trả lời này
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
Xem:
/**
* 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;
}
Thử cái này:
date("H:i:s",-57600 + 685);
Lấy từ
http://bytes.com/topic/php/answers/3917-seconds-converted-hh-mm-ss
Hàm gmtdate () không hoạt động với tôi vì tôi đang theo dõi số giờ làm việc trong một dự án và nếu quá 24 giờ, bạn sẽ nhận được số tiền còn lại sau 24 giờ. Nói cách khác, 37 giờ trở thành 13 giờ. (tất cả như đã nêu ở trên bởi Glavic - cảm ơn ví dụ của bạn!) Cái này hoạt động tốt:
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
Chức năng này của tôi rất hữu ích, bạn có thể mở rộng nó:
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;}
Giải pháp từ: https://gist.github.com/SteveJobzniak/c91a8e2426bac5cb9b0cbc1bdbc45e4b
Mã này tránh càng nhiều càng tốt các lệnh gọi hàm tẻ nhạt và xây dựng chuỗi từng mảnh, và các hàm lớn và cồng kềnh mà mọi người đang thực hiện cho việc này.
Nó tạo ra định dạng "1h05m00s" và sử dụng các số 0 đứng đầu trong vài phút và giây, miễn là một thành phần thời gian khác không có trước chúng.
Và nó bỏ qua tất cả các thành phần hàng đầu trống để tránh cung cấp cho bạn thông tin vô dụng như "0h00m01s" (thay vào đó sẽ hiển thị dưới dạng "1s").
Kết quả ví dụ: "1s", "1m00", "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'; }
Nếu bạn muốn làm cho mã thậm chí ngắn hơn (nhưng ít đọc hơn), bạn có thể tránh $converted
mảng và thay vào đó đặt các giá trị trực tiếp trong lệnh gọi sprintf (), như sau:
$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'; }
Thời lượng phải bằng 0 hoặc cao hơn trong cả hai đoạn mã ở trên. Thời lượng tiêu cực không được hỗ trợ. Nhưng bạn có thể xử lý thời lượng tiêu cực bằng cách sử dụng mã thay thế sau:
$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()
hack thậm chí còn ngắn hơn thế này, nhưng chỉ hỗ trợ thời lượng tối đa 24 giờ. Bất cứ điều gì trên 24 giờ sẽ thất bại nếu bạn sử dụng thủ thuật gmdate!
Một cách đơn giản để sử dụng DateTime cho việc này là:
$time = 60; //sec.
$now = time();
$rep = new DateTime('@'.$now);
$diff = new DateTime('@'.($now+$time));
$return = $diff->diff($rep)->format($format);
//output: 01:04:65
Đây là một giải pháp đơn giản mang đến cho bạn khả năng sử dụng định dạng Phương thức DateTime.
Trong java bạn có thể sử dụng cách này.
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);
}
Chà, tôi cần thứ gì đó sẽ giảm giây thành giờ và phút, nhưng sẽ vượt quá 24 giờ, và không giảm thêm thành ngày.
Đây là một chức năng đơn giản mà làm việc. Bạn có thể cải thiện nó ... Nhưng đây là:
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;
Để chuyển đổi nó thành một chức năng:
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;
}
Nếu bạn cần làm điều đó trong javascript, bạn có thể làm điều đó chỉ bằng một dòng mã như đã trả lời ở đây Chuyển đổi giây thành HH-MM-SS bằng JavaScript . Thay thế GIÂY bằng những gì bạn muốn chuyển đổi.
var time = new Date(SECONDS * 1000).toISOString().substr(11, 8);
Nếu bạn muốn tạo chuỗi thời lượng âm thanh / video như YouTube, v.v. bạn có thể làm:
($seconds >= 60) ? ltrim(gmdate("H:i:s", $seconds), ":0") : gmdate("0:s", $seconds)
Sẽ trả về chuỗi như:
55.55 => '0:55'
100 => '1:40'
Có lẽ sẽ không hoạt động tốt trong thời gian> = 24 giờ.
Đây là một cách hay để làm điều đó:
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;
}
Chỉ trong trường hợp bất kỳ ai khác đang tìm kiếm một chức năng đơn giản để trả về định dạng độc đáo này (tôi biết đó không phải là định dạng mà OP yêu cầu), đây là những gì tôi vừa nghĩ ra. Cảm ơn @mughal cho mã này dựa trên.
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;
}
Bất cứ ai tìm kiếm điều này trong tương lai, điều này đưa ra định dạng mà poster ban đầu yêu cầu.
$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
thành mộtdate/time
hoặc thành số giờ: Phút: Giây?