[英]PHP - Format seconds as hours and minutes with minimum
我試圖弄清楚如何將包含秒數的變量格式化為字符串,該字符串將以人類可讀的格式表示時間,但將分鍾數舍入到下一個15。
例:
$seconds = 4320; //
echo $convertAndRoundTime($seconds);
// would result in
//0 days, 1 hour and 15 minutes
// rather than
//0 days, 1 hour and 12 minutes
我可以使用下面的代碼(在此處找到),使其與確切的時間一起工作,例如12分鍾。
function secondsToTime($seconds) {
$dtF = new \DateTime('@0');
$dtT = new \DateTime("@$seconds");
return $dtF->diff($dtT)->format('%a days, %h hours, %i minutes and %s seconds');
}
但是如何將分鍾向上舍入到下一個15。因此,如果是8分鍾,則舍入為15,如果是18分鍾,則舍入為30,依此類推。
更新
我想我明白了...
$seconds = "4320";
$seconds = round($seconds);
if (gmdate("i",$seconds) % 15 != 0) $seconds = round($seconds / (15 * 60)) * (15 * 60);
$dtF = new \DateTime('@0');
$dtT = new \DateTime("@$seconds");
$days = $dtF->diff($dtT)->format('%a') * 3; // calculate days as 8 hour work days
echo $days.' days, '.$dtF->diff($dtT)->format('%h hours, %i minutes and %s seconds');
只需將$seconds
除以900(15 * 60),將結果四舍五入,再乘以900,然后將其分配給$seconds
。 然后根據需要對其進行格式化。 例如:
$seconds = 4320;
$seconds = ceil($seconds / 900) * 900;
使用@Girish的方法概念和@abcdn的四舍五入思想,我創建了下一個代碼
class MyTimeFormatter
{
const DAY_SECONDS = 86400; // 60*60*24;
const HOUR_SECONDS = 3600; // 60*60;
const MINUTE_SECONDS = 60; // 60;
public static function format($timestamp, $isQuarterMinutes = true)
{
$days = self::getTimeInDays($timestamp);
$timestamp -= $days * self::DAY_SECONDS;
$hours = self::getTimeInHours($timestamp);
$timestamp -= $hours * self::HOUR_SECONDS;
$minutes = self::getTimeInMinutes($timestamp);
$timestamp -= $minutes * self::MINUTE_SECONDS;
$seconds = $timestamp;
if ($isQuarterMinutes) {
$minutes = self::_getMinutesInQuarter($minutes);
}
return sprintf(
'%d day(s), %d hour(s), %d minute(s) and %d seconds',
$days, $hours, $minutes, $seconds
);
}
public static function getTimeInDays($timestamp)
{
return (int)($timestamp/self::DAY_SECONDS);
}
public static function getTimeInHours($timestamp)
{
return (int)($timestamp/self::HOUR_SECONDS);
}
public static function getTimeInMinutes($timestamp)
{
return (int)($timestamp/self::MINUTE_SECONDS);
}
private static function _getMinutesInQuarter($minutes)
{
return ceil($minutes/15) * 15;
}
}
所以如果你打電話
$seconds = 4322;
echo MyTimeFormatter::format($seconds), "\n";
echo MyTimeFormatter::format($seconds, false), "\n";
它打印
0 day(s), 1 hour(s), 15 minute(s) and 2 seconds
0 day(s), 1 hour(s), 12 minute(s) and 2 seconds
答案是:
<?php
$seconds = 93816;
echo getDaysTime($seconds);
function getDaysTime($seconds) {
$noOfDays = intval($seconds/86400);
$remainingSeconds = $seconds%86400;
return $noOfDays . ' day(s), ' . getHoursTime($remainingSeconds);
}
function getHoursTime($seconds) {
$noOfHours = intval($seconds/3600);
$remainingSeconds = $seconds%3600;
return $noOfHours . ' hour(s), ' . getMinutesTime($remainingSeconds);
}
function getMinutesTime($seconds) {
$noOfMinutes = intval($seconds/60);
$remainingSeconds = $seconds%60;
return $noOfMinutes . ' minute(s), ' . getSecondsTime($remainingSeconds);
}
function getSecondsTime($seconds) {
return $seconds . ' second(s), ';
}
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.