seconds to minutes and days to weeks

后端 未结 3 1686
时光说笑
时光说笑 2020-12-19 19:26

My question is, how with PHP we can have an automated system, which can do this: If we have $seconds= 120; And the script should get this value, see that this

相关标签:
3条回答
  • 2020-12-19 20:03
    <?php
    
        /**
         * @param int $secs
         *
         * @return string
         */
        function formatSeconds($secs) {
            $secs = (int)$secs;
            if ( $secs === 0 ) {
                return '0 secs';
            }
            // variables for holding values
            $mins  = 0;
            $hours = 0;
            $days  = 0;
            $weeks = 0;
            // calculations
            if ( $secs >= 60 ) {
                $mins = (int)($secs / 60);
                $secs = $secs % 60;
            }
            if ( $mins >= 60 ) {
                $hours = (int)($mins / 60);
                $mins = $mins % 60;
            }
            if ( $hours >= 24 ) {
                $days = (int)($hours / 24);
                $hours = $hours % 60;
            }
            if ( $days >= 7 ) {
                $weeks = (int)($days / 7);
                $days = $days % 7;
            }
            // format result
            $result = '';
            if ( $weeks ) {
                $result .= "{$weeks} week(s) ";
            }
            if ( $days ) {
                $result .= "{$days} day(s) ";
            }
            if ( $hours ) {
                $result .= "{$hours} hour(s) ";
            }
            if ( $mins ) {
                $result .= "{$mins} min(s) ";
            }
            if ( $secs ) {
                $result .= "{$secs} sec(s) ";
            }
            $result = rtrim($result);
            return $result;
        }
    
        echo formatSeconds(0), "\n";
        echo formatSeconds(30), "\n";
        echo formatSeconds(300), "\n";
        echo formatSeconds(3000), "\n";
        echo formatSeconds(30000), "\n";
        echo formatSeconds(300000), "\n";
        echo formatSeconds(3000000), "\n";
        echo formatSeconds(30000000), "\n";
    

    Output:

    0 secs
    30 sec(s)
    5 min(s)
    50 min(s)
    8 hour(s) 20 min(s)
    3 day(s) 23 hour(s) 20 min(s)
    4 week(s) 6 day(s) 53 hour(s) 20 min(s)
    49 week(s) 4 day(s) 53 hour(s) 20 min(s)
    
    0 讨论(0)
  • 2020-12-19 20:06

    You could use something as simple as:

    $seconds = 120;
    $minutes = floor($seconds/60);
    echo $minutes.' min';
    

    Am not really sure if I have understood your question properly though.

    0 讨论(0)
  • 2020-12-19 20:24

    4 week(s) 6 day(s) 53 hour(s) 20 min(s)

    53 hour(s) ? also, 300000 seconds is 3 days 11hrs, not 3 days 23hrs

    function formatSeconds($secs) {
    
        if (!$secs = (int)$secs)
            return '0 seconds';
    
        $units = array(
            'week' => 604800,
            'day' => 86400,
            'hour' => 3600,
            'minute' => 60,
            'second' => 1
        );
    
        $strs = array();
    
        foreach($units as $name=>$int){
            if($secs < $int)
                continue;
            $num = (int) ($secs / $int);
            $secs = $secs % $int;
            $strs[] = "$num $name".(($num == 1) ? '' : 's');
        }
    
        return implode(', ', $strs);
    }
    
    var_dump(formatSeconds(0));
    var_dump(formatSeconds(30));
    var_dump(formatSeconds(300));
    var_dump(formatSeconds(3000));
    var_dump(formatSeconds(30000));
    var_dump(formatSeconds(300000));
    var_dump(formatSeconds(3000000));
    var_dump(formatSeconds(30000000));
    
    
    string(9) "0 seconds"
    string(10) "30 seconds"
    string(9) "5 minutes"
    string(10) "50 minutes"
    string(19) "8 hours, 20 minutes"
    string(28) "3 days, 11 hours, 20 minutes"
    string(37) "4 weeks, 6 days, 17 hours, 20 minutes"
    string(37) "49 weeks, 4 days, 5 hours, 20 minutes"
    
    0 讨论(0)
提交回复
热议问题