Вход Регистрация
Файл: Form Generator/Project Files/system/helpers/date_helper.php
Строк: 399
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP 5.1.6 or newer
 *
 * @package        CodeIgniter
 * @author        ExpressionEngine Dev Team
 * @copyright    Copyright (c) 2008 - 2011, EllisLab, Inc.
 * @license        http://codeigniter.com/user_guide/license.html
 * @link        http://codeigniter.com
 * @since        Version 1.0
 * @filesource
 */

// ------------------------------------------------------------------------

/**
 * CodeIgniter Date Helpers
 *
 * @package        CodeIgniter
 * @subpackage    Helpers
 * @category    Helpers
 * @author        ExpressionEngine Dev Team
 * @link        http://codeigniter.com/user_guide/helpers/date_helper.html
 */

// ------------------------------------------------------------------------

/**
 * Get "now" time
 *
 * Returns time() or its GMT equivalent based on the config file preference
 *
 * @access    public
 * @return    integer
 */
if ( ! function_exists('now'))
{
    function 
now()
    {
        
$CI =& get_instance();

        if (
strtolower($CI->config->item('time_reference')) == 'gmt')
        {
            
$now time();
            
$system_time mktime(gmdate("H"$now), gmdate("i"$now), gmdate("s"$now), gmdate("m"$now), gmdate("d"$now), gmdate("Y"$now));

            if (
strlen($system_time) < 10)
            {
                
$system_time time();
                
log_message('error''The Date class could not set a proper GMT timestamp so the local time() value was used.');
            }

            return 
$system_time;
        }
        else
        {
            return 
time();
        }
    }
}

// ------------------------------------------------------------------------

/**
 * Convert MySQL Style Datecodes
 *
 * This function is identical to PHPs date() function,
 * except that it allows date codes to be formatted using
 * the MySQL style, where each code letter is preceded
 * with a percent sign:  %Y %m %d etc...
 *
 * The benefit of doing dates this way is that you don't
 * have to worry about escaping your text letters that
 * match the date codes.
 *
 * @access    public
 * @param    string
 * @param    integer
 * @return    integer
 */
if ( ! function_exists('mdate'))
{
    function 
mdate($datestr ''$time '')
    {
        if (
$datestr == '')
            return 
'';

        if (
$time == '')
            
$time now();

        
$datestr str_replace('%\', '', preg_replace("/([a-z]+?){1}/i", "\\\1", $datestr));
        return date($datestr, $time);
    }
}

// ------------------------------------------------------------------------

/**
 * Standard Date
 *
 * Returns a date formatted according to the submitted standard.
 *
 * @access    public
 * @param    string    the chosen format
 * @param    integer    Unix timestamp
 * @return    string
 */
if ( ! function_exists('
standard_date'))
{
    function standard_date($fmt = '
DATE_RFC822', $time = '')
    {
        $formats = array(
                        '
DATE_ATOM'        =>    '%Y-%m-%dT%H:%i:%s%Q',
                        '
DATE_COOKIE'    =>    '%l, %d-%M-%%H:%i:%s UTC',
                        '
DATE_ISO8601'    =>    '%Y-%m-%dT%H:%i:%s%Q',
                        '
DATE_RFC822'    =>    '%D, %%%%H:%i:%%O',
                        '
DATE_RFC850'    =>    '%l, %d-%M-%%H:%i:%s UTC',
                        '
DATE_RFC1036'    =>    '%D, %%%%H:%i:%%O',
                        '
DATE_RFC1123'    =>    '%D, %%%%H:%i:%%O',
                        '
DATE_RSS'        =>    '%D, %%%%H:%i:%%O',
                        '
DATE_W3C'        =>    '%Y-%m-%dT%H:%i:%s%Q'
                        );

        if ( ! isset($formats[$fmt]))
        {
            return FALSE;
        }

        return mdate($formats[$fmt], $time);
    }
}

// ------------------------------------------------------------------------

/**
 * Timespan
 *
 * Returns a span of seconds in this format:
 *    10 days 14 hours 36 minutes 47 seconds
 *
 * @access    public
 * @param    integer    a number of seconds
 * @param    integer    Unix timestamp
 * @return    integer
 */
if ( ! function_exists('
timespan'))
{
    function timespan($seconds = 1, $time = '')
    {
        $CI =& get_instance();
        $CI->lang->load('
date');

        if ( ! is_numeric($seconds))
        {
            $seconds = 1;
        }

        if ( ! is_numeric($time))
        {
            $time = time();
        }

        if ($time <= $seconds)
        {
            $seconds = 1;
        }
        else
        {
            $seconds = $time - $seconds;
        }

        $str = '';
        $years = floor($seconds / 31536000);

        if ($years > 0)
        {
            $str .= $years.' '.$CI->lang->line((($years    > 1) ? '
date_years' : 'date_year')).'';
        }

        $seconds -= $years * 31536000;
        $months = floor($seconds / 2628000);

        if ($years > 0 OR $months > 0)
        {
            if ($months > 0)
            {
                $str .= $months.' '.$CI->lang->line((($months    > 1) ? '
date_months' : 'date_month')).'';
            }

            $seconds -= $months * 2628000;
        }

        $weeks = floor($seconds / 604800);

        if ($years > 0 OR $months > 0 OR $weeks > 0)
        {
            if ($weeks > 0)
            {
                $str .= $weeks.' '.$CI->lang->line((($weeks    > 1) ? '
date_weeks' : 'date_week')).'';
            }

            $seconds -= $weeks * 604800;
        }

        $days = floor($seconds / 86400);

        if ($months > 0 OR $weeks > 0 OR $days > 0)
        {
            if ($days > 0)
            {
                $str .= $days.' '.$CI->lang->line((($days    > 1) ? '
date_days' : 'date_day')).'';
            }

            $seconds -= $days * 86400;
        }

        $hours = floor($seconds / 3600);

        if ($days > 0 OR $hours > 0)
        {
            if ($hours > 0)
            {
                $str .= $hours.' '.$CI->lang->line((($hours    > 1) ? '
date_hours' : 'date_hour')).'';
            }

            $seconds -= $hours * 3600;
        }

        $minutes = floor($seconds / 60);

        if ($days > 0 OR $hours > 0 OR $minutes > 0)
        {
            if ($minutes > 0)
            {
                $str .= $minutes.' '.$CI->lang->line((($minutes    > 1) ? '
date_minutes' : 'date_minute')).'';
            }

            $seconds -= $minutes * 60;
        }

        if ($str == '')
        {
            $str .= $seconds.' '.$CI->lang->line((($seconds    > 1) ? '
date_seconds' : 'date_second')).'';
        }

        return substr(trim($str), 0, -1);
    }
}

// ------------------------------------------------------------------------

/**
 * Number of days in a month
 *
 * Takes a month/year as input and returns the number of days
 * for the given month/year. Takes leap years into consideration.
 *
 * @access    public
 * @param    integer a numeric month
 * @param    integer    a numeric year
 * @return    integer
 */
if ( ! function_exists('
days_in_month'))
{
    function days_in_month($month = 0, $year = '')
    {
        if ($month < 1 OR $month > 12)
        {
            return 0;
        }

        if ( ! is_numeric($year) OR strlen($year) != 4)
        {
            $year = date('
Y');
        }

        if ($month == 2)
        {
            if ($year % 400 == 0 OR ($year % 4 == 0 AND $year % 100 != 0))
            {
                return 29;
            }
        }

        $days_in_month    = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
        return $days_in_month[$month - 1];
    }
}

// ------------------------------------------------------------------------

/**
 * Converts a local Unix timestamp to GMT
 *
 * @access    public
 * @param    integer Unix timestamp
 * @return    integer
 */
if ( ! function_exists('
local_to_gmt'))
{
    function local_to_gmt($time = '')
    {
        if ($time == '')
            $time = time();

        return mktime( gmdate("H", $time), gmdate("i", $time), gmdate("s", $time), gmdate("m", $time), gmdate("d", $time), gmdate("Y", $time));
    }
}

// ------------------------------------------------------------------------

/**
 * Converts GMT time to a localized value
 *
 * Takes a Unix timestamp (in GMT) as input, and returns
 * at the local value based on the timezone and DST setting
 * submitted
 *
 * @access    public
 * @param    integer Unix timestamp
 * @param    string    timezone
 * @param    bool    whether DST is active
 * @return    integer
 */
if ( ! function_exists('
gmt_to_local'))
{
    function gmt_to_local($time = '', $timezone = '
UTC', $dst = FALSE)
    {
        if ($time == '')
        {
            return now();
        }

        $time += timezones($timezone) * 3600;

        if ($dst == TRUE)
        {
            $time += 3600;
        }

        return $time;
    }
}

// ------------------------------------------------------------------------

/**
 * Converts a MySQL Timestamp to Unix
 *
 * @access    public
 * @param    integer Unix timestamp
 * @return    integer
 */
if ( ! function_exists('
mysql_to_unix'))
{
    function mysql_to_unix($time = '')
    {
        // We'
ll remove certain characters for backward compatibility
        
// since the formatting changed with MySQL 4.1
        // YYYY-MM-DD HH:MM:SS

        
$time str_replace('-'''$time);
        
$time str_replace(':'''$time);
        
$time str_replace(' '''$time);

        
// YYYYMMDDHHMMSS
        
return  mktime(
                        
substr($time82),
                        
substr($time102),
                        
substr($time122),
                        
substr($time42),
                        
substr($time62),
                        
substr($time04)
                        );
    }
}

// ------------------------------------------------------------------------

/**
 * Unix to "Human"
 *
 * Formats Unix timestamp to the following prototype: 2006-08-21 11:35 PM
 *
 * @access    public
 * @param    integer Unix timestamp
 * @param    bool    whether to show seconds
 * @param    string    format: us or euro
 * @return    string
 */
if ( ! function_exists('unix_to_human'))
{
    function 
unix_to_human($time ''$seconds FALSE$fmt 'us')
    {
        
$r  date('Y'$time).'-'.date('m'$time).'-'.date('d'$time).' ';

        if (
$fmt == 'us')
        {
            
$r .= date('h'$time).':'.date('i'$time);
        }
        else
        {
            
$r .= date('H'$time).':'.date('i'$time);
        }

        if (
$seconds)
        {
            
$r .= ':'.date('s'$time);
        }

        if (
$fmt == 'us')
        {
            
$r .= ' '.date('A'$time);
        }

        return 
$r;
    }
}

// ------------------------------------------------------------------------

/**
 * Convert "human" date to GMT
 *
 * Reverses the above process
 *
 * @access    public
 * @param    string    format: us or euro
 * @return    integer
 */
if ( ! function_exists('human_to_unix'))
{
    function 
human_to_unix($datestr '')
    {
        if (
$datestr == '')
        {
            return 
FALSE;
        }

        
$datestr trim($datestr);
        
$datestr preg_replace("/40+/"' '$datestr);

        if ( ! 
preg_match('/^[0-9]{2,4}-[0-9]{1,2}-[0-9]{1,2}s[0-9]{1,2}:[0-9]{1,2}(?::[0-9]{1,2})?(?:s[AP]M)?$/i'$datestr))
        {
            return 
FALSE;
        }

        
$split explode(' '$datestr);

        
$ex explode("-"$split['0']);

        
$year  = (strlen($ex['0']) == 2) ? '20'.$ex['0'] : $ex['0'];
        
$month = (strlen($ex['1']) == 1) ? '0'.$ex['1']  : $ex['1'];
        
$day   = (strlen($ex['2']) == 1) ? '0'.$ex['2']  : $ex['2'];

        
$ex explode(":"$split['1']);

        
$hour = (strlen($ex['0']) == 1) ? '0'.$ex['0'] : $ex['0'];
        
$min  = (strlen($ex['1']) == 1) ? '0'.$ex['1'] : $ex['1'];

        if (isset(
$ex['2']) && preg_match('/[0-9]{1,2}/'$ex['2']))
        {
            
$sec  = (strlen($ex['2']) == 1) ? '0'.$ex['2'] : $ex['2'];
        }
        else
        {
            
// Unless specified, seconds get set to zero.
            
$sec '00';
        }

        if (isset(
$split['2']))
        {
            
$ampm strtolower($split['2']);

            if (
substr($ampm01) == 'p' AND $hour 12)
                
$hour $hour 12;

            if (
substr($ampm01) == 'a' AND $hour == 12)
                
$hour =  '00';

            if (
strlen($hour) == 1)
                
$hour '0'.$hour;
        }

        return 
mktime($hour$min$sec$month$day$year);
    }
}

// ------------------------------------------------------------------------

/**
 * Timezone Menu
 *
 * Generates a drop-down menu of timezones.
 *
 * @access    public
 * @param    string    timezone
 * @param    string    classname
 * @param    string    menu name
 * @return    string
 */
if ( ! function_exists('timezone_menu'))
{
    function 
timezone_menu($default 'UTC'$class ""$name 'timezones')
    {
        
$CI =& get_instance();
        
$CI->lang->load('date');

        if (
$default == 'GMT')
            
$default 'UTC';

        
$menu '<select name="'.$name.'"';

        if (
$class != '')
        {
            
$menu .= ' class="'.$class.'"';
        }

        
$menu .= ">n";

        foreach (
timezones() as $key => $val)
        {
            
$selected = ($default == $key) ? " selected='selected'" '';
            
$menu .= "<option value='{$key}'{$selected}>".$CI->lang->line($key)."</option>n";
        }

        
$menu .= "</select>";

        return 
$menu;
    }
}

// ------------------------------------------------------------------------

/**
 * Timezones
 *
 * Returns an array of timezones.  This is a helper function
 * for various other ones in this library
 *
 * @access    public
 * @param    string    timezone
 * @return    string
 */
if ( ! function_exists('timezones'))
{
    function 
timezones($tz '')
    {
        
// Note: Don't change the order of these even though
        // some items appear to be in the wrong order

        
$zones = array(
                        
'UM12'        => -12,
                        
'UM11'        => -11,
                        
'UM10'        => -10,
                        
'UM95'        => -9.5,
                        
'UM9'        => -9,
                        
'UM8'        => -8,
                        
'UM7'        => -7,
                        
'UM6'        => -6,
                        
'UM5'        => -5,
                        
'UM45'        => -4.5,
                        
'UM4'        => -4,
                        
'UM35'        => -3.5,
                        
'UM3'        => -3,
                        
'UM2'        => -2,
                        
'UM1'        => -1,
                        
'UTC'        => 0,
                        
'UP1'        => +1,
                        
'UP2'        => +2,
                        
'UP3'        => +3,
                        
'UP35'        => +3.5,
                        
'UP4'        => +4,
                        
'UP45'        => +4.5,
                        
'UP5'        => +5,
                        
'UP55'        => +5.5,
                        
'UP575'        => +5.75,
                        
'UP6'        => +6,
                        
'UP65'        => +6.5,
                        
'UP7'        => +7,
                        
'UP8'        => +8,
                        
'UP875'        => +8.75,
                        
'UP9'        => +9,
                        
'UP95'        => +9.5,
                        
'UP10'        => +10,
                        
'UP105'        => +10.5,
                        
'UP11'        => +11,
                        
'UP115'        => +11.5,
                        
'UP12'        => +12,
                        
'UP1275'    => +12.75,
                        
'UP13'        => +13,
                        
'UP14'        => +14
                    
);

        if (
$tz == '')
        {
            return 
$zones;
        }

        if (
$tz == 'GMT')
            
$tz 'UTC';

        return ( ! isset(
$zones[$tz])) ? $zones[$tz];
    }
}


/* End of file date_helper.php */
/* Location: ./system/helpers/date_helper.php */
Онлайн: 1
Реклама