date.php.svn-base

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 1,690 行 · 第 1/5 页

SVN-BASE
1,690
字号
<?php/** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category   Zend * @package    Zend_Date * @copyright  Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com) * @version    $Id: Date.php 4192 2007-03-22 22:19:37Z thomas $ * @license    http://framework.zend.com/license/new-bsd     New BSD License *//** * Include needed Date classes */require_once 'Zend/Date/DateObject.php';require_once 'Zend/Date/Exception.php';require_once 'Zend/Locale.php';require_once 'Zend/Locale/Math.php';/** * @category   Zend * @package    Zend_Date * @copyright  Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com) * @license    http://framework.zend.com/license/new-bsd     New BSD License */class Zend_Date extends Zend_Date_DateObject {    private $_Locale  = null;    // Fractional second variables    private $_Fractional = 0;    private $_Precision  = 3;    private static $_Options = array('format_type' => 'iso');    // Class wide Date Constants    // day formats    const DAY            = 'DAY';            // d - 2 digit day of month, 01-31    const DAY_SHORT      = 'DAY_SHORT';      // j - 1,2 digit day of month, 1-31    const DAY_SUFFIX     = 'DAY_SUFFIX';     // S - english suffix day of month, st-th    const DAY_OF_YEAR    = 'DAY_OF_YEAR';    // z - Number of day of year    const WEEKDAY        = 'WEEKDAY';        // l - full day name - locale aware, Monday - Sunday    const WEEKDAY_SHORT  = 'WEEKDAY_SHORT';  // D - 3 letter day of week - locale aware, Mon-Sun    const WEEKDAY_NARROW = 'WEEKDAY_NARROW'; // --- 1 letter day name - locale aware, M-S    const WEEKDAY_NAME   = 'WEEKDAY_NAME';   // --- 2 letter day name - locale aware,Mo-Su    const WEEKDAY_8601   = 'WEEKDAY_8601';   // N - digit weekday ISO 8601, 1-7 1 = monday, 7=sunday    const WEEKDAY_DIGIT  = 'WEEKDAY_DIGIT';  // w - weekday, 0-6 0=sunday, 6=saturday    // week formats    const WEEK           = 'WEEK';           // W - number of week ISO8601, 1-53    // month formats    const MONTH          = 'MONTH';          // m - 2 digit month, 01-12    const MONTH_SHORT    = 'MONTH_SHORT';    // n - 1 digit month, no leading zeros, 1-12    const MONTH_DAYS     = 'MONTH_DAYS';     // t - Number of days this month    const MONTH_NAME        = 'MONTH_NAME';         // F - full month name - locale aware, January-December    const MONTH_NAME_SHORT  = 'MONTH_NAME_SHORT';  // M - 3 letter monthname - locale aware, Jan-Dec    const MONTH_NAME_NARROW = 'MONTH_NAME_NARROW'; // --- 1 letter month name - locale aware, J-D    // year formats    const YEAR           = 'YEAR';           // Y - 4 digit year    const YEAR_SHORT     = 'YEAR_SHORT';     // y - 2 digit year, leading zeros 00-99    const YEAR_8601      = 'YEAR_8601';      // o - number of year ISO8601    const YEAR_SHORT_8601= 'YEAR_SHORT_8601';// --- 2 digit number of year ISO8601    const LEAPYEAR       = 'LEAPYEAR';       // L - is leapyear ?, 0-1    // time formats    const MERIDIEM       = 'MERIDIEM';       // A,a - AM/PM - locale aware, AM/PM    const SWATCH         = 'SWATCH';         // B - Swatch Internet Time    const HOUR           = 'HOUR';           // H - 2 digit hour, leading zeros, 00-23    const HOUR_SHORT     = 'HOUR_SHORT';     // G - 1 digit hour, no leading zero, 0-23    const HOUR_AM        = 'HOUR_AM';        // h - 2 digit hour, leading zeros, 01-12 am/pm    const HOUR_SHORT_AM  = 'HOUR_SHORT_AM';  // g - 1 digit hour, no leading zero, 1-12 am/pm    const MINUTE         = 'MINUTE';         // i - 2 digit minute, leading zeros, 00-59    const MINUTE_SHORT   = 'MINUTE_SHORT';   // --- 1 digit minute, no leading zero, 0-59    const SECOND         = 'SECOND';         // s - 2 digit second, leading zeros, 00-59    const SECOND_SHORT   = 'SECOND_SHORT';   // --- 1 digit second, no leading zero, 0-59    const MILLISECOND    = 'MILLISECOND';    // --- milliseconds    // timezone formats    const TIMEZONE_NAME  = 'TIMEZONE_NAME';  // e - timezone string    const DAYLIGHT       = 'DAYLIGHT';       // I - is Daylight saving time ?, 0-1    const GMT_DIFF       = 'GMT_DIFF';       // O - GMT difference, -1200 +1200    const GMT_DIFF_SEP   = 'GMT_DIFF_SEP';   // P - seperated GMT diff, -12:00 +12:00    const TIMEZONE       = 'TIMEZONE';       // T - timezone, EST, GMT, MDT    const TIMEZONE_SECS  = 'TIMEZONE_SECS';  // Z - timezone offset in seconds, -43200 +43200    // date strings    const ISO_8601       = 'ISO_8601';       // c - ISO 8601 date string    const RFC_2822       = 'RFC_2822';       // r - RFC 2822 date string    const TIMESTAMP      = 'TIMESTAMP';      // U - unix timestamp    // additional formats    const ERA            = 'ERA';            // --- short name of era, locale aware,    const ERA_NAME       = 'ERA_NAME';       // --- full name of era, locale aware,    const DATES          = 'DATES';          // --- standard date, locale aware    const DATE_FULL      = 'DATE_FULL';      // --- full date, locale aware    const DATE_LONG      = 'DATE_LONG';      // --- long date, locale aware    const DATE_MEDIUM    = 'DATE_MEDIUM';    // --- medium date, locale aware    const DATE_SHORT     = 'DATE_SHORT';     // --- short date, locale aware    const TIMES          = 'TIMES';          // --- standard time, locale aware    const TIME_FULL      = 'TIME_FULL';      // --- full time, locale aware    const TIME_LONG      = 'TIME_LONG';      // --- long time, locale aware    const TIME_MEDIUM    = 'TIME_MEDIUM';    // --- medium time, locale aware    const TIME_SHORT     = 'TIME_SHORT';     // --- short time, locale aware    const ATOM           = 'ATOM';           // --- DATE_ATOM    const COOKIE         = 'COOKIE';         // --- DATE_COOKIE    const RFC_822        = 'RFC_822';        // --- DATE_RFC822    const RFC_850        = 'RFC_850';        // --- DATE_RFC850    const RFC_1036       = 'RFC_1036';       // --- DATE_RFC1036    const RFC_1123       = 'RFC_1123';       // --- DATE_RFC1123    const RFC_3339       = 'RFC_3339';       // --- DATE_RFC3339    const RSS            = 'RSS';            // --- DATE_RSS    const W3C            = 'W3C';            // --- DATE_W3C    /**     * Generates the standard date object, could be a unix timestamp, localized date,     * string, integer and so on. Also parts of dates or time are supported     * Always set the default timezone: http://php.net/date_default_timezone_set     * For example, in your bootstrap: date_default_timezone_set('America/Los_Angeles');     * For detailed instructions please look in the docu.     *     * @param  string|integer|Zend_Date  $date    OPTIONAL Date value or value of date part to set                                                           ,depending on $part. If null the actual time is set     * @param  string                    $part    OPTIONAL Defines the input format of $date     * @param  string|Zend_Locale        $locale  OPTIONAL Locale for parsing input     * @return Zend_Date     * @throws Zend_Date_Exception     */    public function __construct($date = null, $part = null, $locale = null)    {        if (Zend_Locale::isLocale($date)) {            $locale = $date;            $date = null;            $part = null;        } else if (Zend_Locale::isLocale($part)) {            $locale = $part;            $part = null;        }        $this->setLocale($locale);        // set the timezone and offset for $this        $zone = @date_default_timezone_get();        if ($zone !== 'UTC') {            $this->setTimezone($zone);        }        if (is_string($date) && defined("self::".$date)) {            $part = $date;            $date = null;        }        if (is_null($date)) {            $date = Zend_Date::now();            if (($part !== null) && ($part !== Zend_Date::TIMESTAMP)) {                $date = $date->get($part);            }        }        if (($date instanceof Zend_TimeSync_Ntp) or             ($date instanceof Zend_TimeSync_Sntp)) {            $date = $date->getInfo();            $date = $this->_getTime($date['offset']);            $part = null;        }        // set datepart        if (($part !== null && $part !== Zend_Date::TIMESTAMP) or (!is_numeric($date))) {            $this->setUnixTimestamp(0);            $this->set($date, $part, $this->_Locale);        } else {            $this->setUnixTimestamp($date);        }    }    /**     * Sets class wide options, if no option was given, the actual set options will be returned     *     * @param  array  $options  Options to set     * @throws Zend_Date_Exception     * @return Options array if no option was given      */    public static function setOptions(array $options = array())    {        if (empty($options)) {            return self::$_Options;        }        foreach ($options as $name => $value) {            $name  = strtolower($name);            $value = strtolower($value);            if (isset(self::$_Options[$name])) {                switch($name) {                    case 'format_type' :                        if (($value != 'php') && ($value != 'iso')) {                            throw new Zend_Date_Exception("Unknown format type ($value) for dates, only 'iso' and 'php' supported", $value);                        }                }                self::$_Options[$name] = $value;            }            else {                throw new Zend_Date_Exception("Unknown option: $name = $value");            }        }    }    /**     * Returns this object's internal UNIX timestamp (equivalent to Zend_Date::TIMESTAMP).     * If the timestamp is too large for integers, then the return value will be a string.     * This function does not return the timestamp as an object.     * Use clone() or copyPart() instead.     *     * @return integer|string  UNIX timestamp     */    public function getTimestamp()    {        return $this->getUnixTimestamp();    }    /**     * Returns the calculated timestamp     * HINT: timestamps are always GMT     *     * @param  string                    $calc    Type of calculation to make     * @param  string|integer|Zend_Date  $stamp   Timestamp to calculate, when null the actual timestamp is calculated     * @return Zend_Date|integer     * @throws Zend_Date_Exception     */    private function _timestamp($calc, $stamp)    {        if ($stamp instanceof Zend_Date) {            // extract timestamp from object            $stamp = $stamp->get(Zend_Date::TIMESTAMP, true);        }        if ($calc === 'set') {            $return = $this->setUnixTimestamp($stamp);        } else {            $return = $this->_calcdetail($calc, $stamp, Zend_Date::TIMESTAMP, null);        }        if ($calc != 'cmp') {            return $this;        }        return $return;    }    /**     * Sets a new timestamp     *     * @param  integer|string|Zend_Date  $timestamp  Timestamp to set     * @return Zend_Date     * @throws Zend_Date_Exception     */    public function setTimestamp($timestamp)    {        return $this->_timestamp('set', $timestamp);    }    /**     * Adds a timestamp     *     * @param  integer|string      $timestamp  Timestamp to add     * @return Zend_Date     * @throws Zend_Date_Exception     */    public function addTimestamp($timestamp)    {        return $this->_timestamp('add', $timestamp);    }    /**     * Subtracts a timestamp     *     * @param  integer|string      $timestamp  Timestamp to sub     * @return Zend_Date     * @throws Zend_Date_Exception     */    public function subTimestamp($timestamp)    {        return $this->_timestamp('sub', $timestamp);    }    /**     * Compares two timestamps, returning the difference as integer     *     * @param  integer|string      $timestamp  Timestamp to compare     * @return integer  0 = equal, 1 = later, -1 = earlier     * @throws Zend_Date_Exception     */    public function compareTimestamp($timestamp)    {        return $this->_timestamp('cmp', $timestamp);    }    /**     * Returns a string representation of the object     * Supported format tokens are:     * G - era, y - year, Y - ISO year, M - month, w - week of year, D - day of year, d - day of month     * E - day of week, e - number of weekday (1-7), h - hour 1-12, H - hour 0-23, m - minute, s - second     * A - milliseconds of day, z - timezone, Z - timezone offset, S - fractional second, a - period of day     *      * Additionally format tokens but non ISO conform are:     * SS - day suffix, eee - php number of weekday(0-6), ddd - number of days per month      * l - Leap year, B - swatch internet time, I - daylight saving time, X - timezone offset in seconds

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?