<?php 
namespace Jackbooted\Time; 
 
use \Jackbooted\Util\Log4PHP; 
use \Jackbooted\Util\StringUtil; 
/** 
 * @copyright Confidential and copyright (c) 2016 Jackbooted Software. All rights reserved. 
 * 
 * Written by Brett Dutton of Jackbooted Software 
 * brett at brettdutton dot com 
 * 
 * This software is written and distributed under the GNU General Public 
 * License which means that its source code is freely-distributed and 
 * available to the general public. 
 */ 
 
/** 
 * Stopwatch 
 */ 
class Stopwatch extends \Jackbooted\Util\JB { 
    private static $log; 
 
    private $startTime; 
    private $msg; 
 
    public static function init () { 
        self::$log = Log4PHP::logFactory ( __CLASS__ ); 
    } 
 
    public function __construct ( $msg, $displayStart=true ) { 
        parent::__construct(); 
        $this->msg = $msg; 
        $this->start ( $displayStart ); 
    } 
    private function start ( $displayStart ) { 
        $this->startTime = self::begin(); 
        if ( $displayStart ) self::$log->debug ( $this->msg ); 
        return $this->startTime; 
    } 
    public function stop () { 
        $delta = self::end ( $this->startTime ); 
        self::$log->debug ( $this->msg . ':' . $this->msToStr ( $delta ) ); 
        return $this->msg . ':' . $this->msToStr ( $delta ); 
    } 
    public function getTime () { 
        return self::end ( $this->startTime ); 
    } 
    public function logLoadTime () { 
        return $this->stop (); 
    } 
 
    public static function getLog ( ) { 
        return self::$log; 
    } 
 
    public static function begin ( ) { 
        return microtime (  true ); 
    } 
 
    public static function end ( $startTime ) { 
        return microtime ( true ) - $startTime; 
    } 
 
    public static function timeToDB ( $time=false ) { 
        if ( $time === false ) $time = time(); 
        return date ( 'Y-m-d H:i:s', $time ); 
    } 
 
    public static function msToStr ( $delta ) { 
        $ms = $delta * 1000; 
        $sec = intval ( $ms / 1000 ); $ms %= 1000; 
 
        $msg = self::secToStr( $sec ); 
        $msg .= ( ( $msg == '' ) ? '' : ' ' ) . $ms . ' ms'; 
 
        return $msg; 
    } 
    public static function secToStr ( $sec ) { 
        $min = intval ( $sec / 60 ); $sec %= 60; 
        $hr  = intval ( $min / 60 ); $min %= 60; 
        $day = intval ( $hr / 24 ); $hr %= 60; 
 
        $msg = ''; 
        if ( $day != 0 ) $msg = StringUtil::unitsFormat( $day, 'day',  $msg ); 
        if ( $hr  != 0 ) $msg = StringUtil::unitsFormat( $hr,  'hour', $msg ); 
        if ( $min != 0 ) $msg = StringUtil::unitsFormat( $min, 'min',  $msg ); 
        if ( $sec != 0 ) $msg = StringUtil::unitsFormat( $sec, 'sec',  $msg ); 
        return $msg; 
    } 
 
    public static function secToDays ( $sec ) { 
        $min = intval ( $sec / 60 ); $sec %= 60; 
        $hr  = intval ( $min / 60 ); $min %= 60; 
        $day = intval ( $hr / 24 );  $hr %= 24; 
 
        return $day; 
    } 
}
 
 |