Phpdatetime 0.6.1.0 2005 04 21.src > Time.class.php

Questions? Need Help? Want to share? » PHP Forum
Script Name:
Phpdatetime 0.6.1.0 2005 04 21.src

Download:
phpdatetime-0.6.1.0-2005-04-21.src.zip

Category:
Date And Time

Archive Content:

Content:

Time.class.php:


<?php
/**
 * Time class and other time functions
 *
 * @copyright Copyright (C) 2003,  2004  Sebastian Mendel <info at sebastianmendel dot de>
 *
 * @license http://www.opensource.org/licenses/lgpl-license.php
 *          GNU Lesser General Public License  - LGPL
 *
 * @package phpDateTime
 * @author Sebastian Mendel <info at sebastianmendel dot de>
 * @version $Id: Time.class.php, v 1.18 2005/03/02 09:42:09 cybot_tm Exp $
 * @source $Source: /cvsroot/phpdatetime/phpDateTime/Time.class.php, v $
 */

/**
 * defines parameters
 */
define('TIME_OMIT_SIGN',   1);
define('TIME_FORCE_SIGN',  2);
define('TIME_OMIT_NULL',   4);

/**
 * Class Time
 * 
 * example:
 * <code>
 * $row = mysql_fetch_assoc( mysql_query(SELECT `time` FROM `table`) );
 * $time = new Time($row['time']);
 * echo $time->get(); // prints: 12:23:12 or 125:30
 * </code>
 *
 * @copyright Copyright (C) 2003,  2004  Sebastian Mendel <info at sebastianmendel dot de>
 *
 * @license http://www.opensource.org/licenses/lgpl-license.php
 *          GNU Lesser General Public License  - LGPL
 *
 * @package phpDateTime
 * @author Sebastian Mendel <info <at> sebastianmendel <dot> de>
 */
class Time
{
    
/**
     * the hours
     * @var integer
     * @access protected
     */
    
var $hours 0;

    
/**
     * the minutes
     * @var integer
     * @access protected
     */
    
var $minutes 0;

    
/**
     * the seconds
     * @var integer
     * @access protected
     */
    
var $seconds 0;

    
/**
     * the microseconds
     * @var integer
     * @access protected
     */
    
var $fractals 0;

    
/**
     * the sign (-1,  +1)
     * @var integer
     * @access protected
     */
    
var $sign 1;

    
/**
     * Constructor
     * defines inital value for time
     * expects Time in form of seconds as int
     * or in form H:M[:S[.M]] as string
     * or null,  if $time is is null then current time is taken
     * or an object Time
     * 
     * @access protected
     * @uses Time::set() to set time and returns this
     * @param string|int|object Time
     * @return Time::set()
     * @todo should default lead to 0 or NOW() ???
     */
    
function Time$time null )
    {
        return 
$this->set$time );
    }

    
/**
     * returns time-string in form [H]HH:MM[:SS[:s]]
     *
     * @access public
     * @uses Time if called statically
     * @uses Time::getSign()
     * @uses Time::getHours()
     * @uses Time::getMinutes()
     * @static
     * @param integer|string|object Time
     * @return string time
     * @todo add non-null values for
     *      seconds and microseconds to return value
     */
    
function get$time NULL )
    {
        if ( 
NULL === $time )
        {
            if ( 
$this->getSign() === -)
            {
                
$sign '-';
            }
            else
            {
                
$sign '';
            }
            
            return 
$sign sprintf("%02d:%02d:%02d",  $this->getHours(),  $this->getMinutes(),  $this->getSeconds() );
        }
        
        
$time = new Time$time );
        return 
$time->get();
    }

    
/**
     * handler for hours,  returns hours
     *
     * @access public
     * @uses Time::$hours
     * @static
     * @param integer|string|object Time
     * @return Time::$hours
     */
    
function getHours$time null )
    {
        if ( 
NULL === $time )
        {
            return 
$this->hours;
        }
        
        
$time = new Time$time );
        return 
$time->getHours();
    }

    
/**
     * handler for minutes,  returns minutes
     *
     * @access public
     * @uses Time::$minutes
     * @static
     * @param integer|string|object Time
     * @return Time::$minutes
     */
    
function getMinutes$time null )
    {
        if ( 
NULL === $time )
        {
            return 
$this->minutes;
        }
        
        
$time = new Time$time );
        return 
$time->getMinutes();
    }

    
/**
     * handler for seconds,  returns seconds of time
     *
     * @access public
     * @uses Time::$seconds
     * @static
     * @param integer|string|object Time
     * @return Time::$seconds
     */
    
function getSeconds$time null )
    {
        if ( 
NULL === $time )
        {
            return 
$this->seconds;
        }
        
        
$time = new Time$time );
        return 
$time->getSeconds();
    }

    
/**
     * handler for sign,  returns sign as -1 or +1
     *
     * @access public
     * @uses Time::$sign
     * @static
     * @param integer|string|object Time
     * @return Time::$sign
     */
    
function getSign$time null )
    {
        if ( 
NULL === $time )
        {
            return 
$this->sign;
        }
        
        
$time = new Time$time );
        return 
$time->getSign();
    }

    
/**
     * returns true if time is negative
     *
     * @access public
     * @uses Time::getSign()
     * @static
     * @param integer|string|object Time
     * @return boolean true or false
     */
    
function isNeg$time null )
    {
        if ( 
NULL === $time )
        {
            if ( 
$this->getSign() < )
            {
                return 
true;
            }
            return 
false;
        }
        
        
$time = new Time$time );
        if ( 
$time->getSign() < )
        {
            return 
true;
        }
        return 
false;
    }
    
    
/**
     * alias for Time:isNeg()
     *
     * @access public
     * @uses Time::isNeg()
     * @static
     * @param integer|string|object Time
     * @return Time::isNeg()
     */
    
function isNegative$time null )
    {
        if ( isset(
$this) )
        {
            return 
$this->isNeg$time );
        }
        else
        {
            return 
Time::isNeg$time );
        }
    }

    
/**
     * checks if current time is 0
     * returns true if time is 0,  otherwise false
     *
     * @access public
     * @uses Time::getAsSeconds()
     * @static
     * @param integer|string|object Time
     * @return boolean true or false
     *
     */
    
function isNull$time null )
    {
        if ( 
NULL === $time )
        {
            if ( 
$this->getAsSeconds() === )
            {
                return 
true;
            }
    
            return 
false;
        }
        
        
$time = new Time$time );
        if ( 
$time->getAsSeconds() === )
        {
            return 
true;
        }

        return 
false;
    }

    
/**
     * returns time in seconds
     *
     * @access public
     * @uses Time if called statically
     * @uses Time::getSign()
     * @uses Time::getHours()
     * @uses Time::getMinutes()
     * @uses Time::getSeconds()
     * @param integer|string|object Time
     * @return integer seconds
     * @static
     * @todo add support for microseconds
     */
    
function getAsSeconds$time NULL )
    {
        if ( 
NULL === $time )
        {
            return 
$this->getSign() * (($this->getHours() * 60 60) + ($this->getMinutes() * 60) + ($this->getSeconds()));
        }
        
        
$time = new Time$time );
        return 
$time->getAsSeconds();
    }

    
/**
     * handler for sign,  sets sign
     *
     * @access public
     * @uses Time::$sign
     * @param integer sign
     */
    
function setSign$sign )
    {
        
$this->sign = (int) $sign;
    }

    
/**
     * handler for hours,  sets hours
     *
     * @access public
     * @uses Time::$hours
     * @param integer hours
     */
    
function setHours$hours )
    {
        
$this->hours = (int) $hours;
    }

    
/**
     * handler for minutes,  sets minutes
     *
     * @access public
     * @uses Time::$minutes
     * @param integer minutes
     */
    
function setMinutes$minutes )
    {
        
$this->minutes = (int) $minutes;
    }

    
/**
     * hanler for seconds,  sets seconds
     *
     * @access public
     * @uses Time::$seconds
     * @param integer seconds
     */
    
function setSeconds$seconds )
    {
        
$this->seconds = (int) $seconds;
    }

    
/**
     * sets time to given value
     * 
     * @access public
     * @uses Time::setTimeFromString()
     * @uses Time::setTimeFromSeconds()
     * @param string|int|object Time
     * @return boolean|string false or time
     */
    
function set$time null )
    {
        if ( 
is_object($time) && get_class($time) == 'time' )
        {
            return 
$this->setTimeFromSeconds($time->getAsSeconds());
        }
        
        if ( 
is_numeric($time) )
        {
            return 
$this->setTimeFromSeconds($time);
        }
        
        return 
$this->setTimeFromString($time);
    }

    
/**
     * sets time from given seconds,
     * returns time as string
     *
     * @access public
     * @uses Time::get() as return value
     * @uses Time::setSign()
     * @uses Time::setHours()
     * @uses Time::setMinutes()
     * @uses Time::setSeconds()
     * @param integer|float seconds
     * @return Time::get()
     * @todo recognize micro-seconds in float value
     */
    
function setTimeFromSeconds$seconds 0.0 )
    {
        
$seconds = (float) $seconds;

        if ( 
$seconds )
        {
            
$seconds $seconds * -1;
            
$this->setSign(-1);
        }
        else
        {
            
$this->setSign(1);
        }

        
$this->setHours(floor($seconds 60 60));
        
$seconds $seconds % ( 60 60 );
        
$this->setMinutes(floor($seconds 60 ));
        
$seconds $seconds 60;
        
$this->setSeconds($seconds);

        return  
$this->get();
    }

    
/**
     * sets time from string in form [H]HH:MM[:SS[.s]]
     * returns new time
     *
     * @access public
     * @uses Time::get() as return value
     * @uses Time::setSign()
     * @uses Time::setHours()
     * @uses Time::setMinutes()
     * @uses Time::setSeconds()
     * @param string time
     * @return Time::get()
     * @todo implement support for micro-seconds
     */
    
function setTimeFromString$time )
    {
        
preg_match("/(\-)?([0-9]*):([0-5]{1}[0-9]{1})(:([0-5]{1}[0-9]{1}(.[0-9]*)?))?$/",  $time,  $time_split);

        if ( isset(
$time_split[1]) && $time_split[1] == '-' )
        {
            
$this->setSign(-1);
        }
        else
        {
            
$this->setSign(1);
        }

        if ( isset(
$time_split[2]) )
        {
            
$this->setHours($time_split[2]);
        }

        if ( isset(
$time_split[3]) )
        {
            
$this->setMinutes($time_split[3]);
        }

        if ( isset(
$time_split[5]) )
        {
            
$this->setSeconds($time_split[5]);
        }

        return 
$this->get();
    }

    
/**
     * Adds time
     * returns new time
     *
     * @access public
     * @uses Time
     * @uses Time::getAsSeconds()
     * @uses Time::setTimeFromSeconds()
     * @uses Time::get() as return value
     * @param integer|string|object Time
     * @return string Time::get()
     */
    
function add$time )
    {
        
$mytime = new Time$time );
        
$new_time $this->getAsSeconds() + $mytime->getAsSeconds();
        
$this->setTimeFromSeconds($new_time);
        return 
$this->get();
    }

    
/**
     * subtracts time
     * returns new time
     * 
     * @access public
     * @uses Time
     * @uses Time::getAsSeconds()
     * @uses Time::setTimeFromSeconds()
     * @uses Time::get() as return value
     * @param integer|string|object Time
     * @return string Time::get()
     */
    
function sub$time )
    {
        
$mytime = new Time($time);
        
$new_time $this->getAsSeconds() - $mytime->getAsSeconds();
        
$this->setTimeFromSeconds($new_time);
        return 
$this->get();
    }

    
/**
     * returns new time
     * 
     * @access public
     * @uses Time
     * @uses Time::getAsSeconds()
     * @uses Time::setTimeFromSeconds()
     * @uses Time::get() as return value
     * @param integer|string|object Time
     * @return string Time::get()
     */
    
function mul$multiplicator )
    {
        
$new_time $this->getAsSeconds() * $multiplicator;
        
$this->setTimeFromSeconds($new_time);
        return 
$this->get();
    }

    
/**
     * returns new time
     * 
     * @access public
     * @uses Time
     * @uses Time::getAsSeconds()
     * @uses Time::setTimeFromSeconds()
     * @uses Time::get() as return value
     * @param integer|string|object Time
     * @return string Time::get()
     */
    
function div$divider )
    {
        
$new_time $this->getAsSeconds() / $divider;
        
$this->setTimeFromSeconds($new_time);
        return 
$this->get();
    }

    
/**
     * returns new time
     * 
     * @access public
     * @uses Time
     * @uses Time::getAsSeconds()
     * @uses Time::setTimeFromSeconds()
     * @uses Time::get() as return value
     * @param integer|string|object Time
     * @return string Time::get()
     * @todo finish
     */
    
function diff$time )
    {
        
$mytime = new Time($time);
        
$time1 $this->getAsSeconds();
        
$time2 $mytime->getAsSeconds();
        
// @todo finish
        
$this->setTimeFromSeconds($new_time);
        return 
$this->get();
    }
}

/**
 * is_time() returns true if given string is in correct Time-Format HHH:MM:SS
 *
 * @param string time
 * @return bool is_time
 *
 * @uses preg_match()
 * @version 1.0.1
 * @changed 1.0.1 - accepts now more then 24 hours in Time-String
 *
 */
function is_time($time)
{
    
// accepts HHHH:MM:SS,  e.g. 23:59:30 or 12:30 or 120:17
    
if ( ! preg_match("/^(\-)?[0-9]{1, 4}:[0-9]{1, 2}(:[0-9]{1, 2})?$/",  $time) )
    {
        return 
false;
    }

    return 
true;
}

/**
 * returns Time1 with the value of Time2 subtracted
 *
 * @param string Time
 * @param string Time
 * @return string Time
 *
 * @uses strlen()
 * @uses substr()
 * @uses is_valid_time()
 * @uses Time::getAsSeconds()
 * @uses Time::get()
 *
 */
function time_sub($time1,  $time2)
{
    if ( empty(
$time1) )
    {
        
$time1 '00:00';
    }

    if ( empty(
$time2) )
    {
        
$time2 '00:00';
    }

    if ( ! 
is_time($time1) || ! is_time($time2) )
    {
        return 
false;
    }

    
$time Time::getTime::getAsSeconds($time1) - Time::getAsSeconds($time2) );

    
// @todo change the check for seconds/returned time-format
    
if ( strlen($time1) > || strlen($time2) > )
    {    
// if given time was with seconds return with seconds also
        
return $time;
    }
    else
    {
        
// else discard seconds
        
return substr($time,  0,  -3);
    }
}

/**
 * returns sum of Time1 and Time2
 *
 * @param string Time
 * @param string Time
 * @return string Time
 *
 * @uses strlen()
 * @uses substr()
 * @uses is_valid_time()
 * @uses Time::getAsSeconds()
 * @uses Time::get()
 *
 */
function time_add($time1,  $time2)
{
    if ( empty(
$time1) )
    {
        
$time1 '00:00';
    }

    if ( empty(
$time2) )
    {
        
$time2 '00:00';
    }

    if ( ! 
is_time($time1) || ! is_time($time2) )
    {
        return 
false;
    }

    
$time Time::getTime::getAsSeconds($time1) + Time::getAsSeconds($time2) );

    
// @todo change the check for seconds/returned time-format
    
if ( strlen($time1) > || strlen($time2) > )
    {    
// if given time was with seconds return with seconds also
        
return $time;
    }
    else
    {
        
// else discard seconds
        
return substr($time,  0,  -3);
    }
}
?>


Other Date And Time Scripts:

  • Phpdatetime 0.6.1.0 2005 04 21.src
WebMaster Resources Home

©RingsWorld.com