繁体   English   中英

PHP-将秒数格式化为小时和分钟,最少

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM