date.php.svn-base

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

SVN-BASE
1,690
字号
                break;            case Zend_Date::RFC_822 :                return $this->date('D\, d M y H\:i\:s O', $this->getUnixTimestamp(), false);                break;            case Zend_Date::RFC_850 :                return $this->date('l\, d\-M\-y H\:i\:s e', $this->getUnixTimestamp(), false);                break;            case Zend_Date::RFC_1036 :                return $this->date('D\, d M y H\:i\:s O', $this->getUnixTimestamp(), false);                break;            case Zend_Date::RFC_1123 :                return $this->date('D\, d M Y H\:i\:s O', $this->getUnixTimestamp(), false);                break;            case Zend_Date::RFC_3339 :                return $this->date('Y\-m\-d\TH\:i\:sP', $this->getUnixTimestamp(), false);                break;            case Zend_Date::RSS :                return $this->date('D\, d M Y H\:i\:s O', $this->getUnixTimestamp(), false);                break;            case Zend_Date::W3C :                return $this->date('Y\-m\-d\TH\:i\:sP', $this->getUnixTimestamp(), false);                break;            default :                return $this->date($part, $this->getUnixTimestamp(), false);                break;        }    }    /**     * Return digit from standard names (english)     * Faster implementation than locale aware searching     */    private function getDigitFromName($name)    {        switch($name) {            case "Jan":                return 1;            case "Feb":                return 2;            case "Mar":                return 3;            case "Apr":                return 4;            case "May":                return 5;            case "Jun":                return 6;            case "Jul":                return 7;            case "Aug":                return 8;            case "Sep":                return 9;            case "Oct":                return 10;            case "Nov":                return 11;            case "Dec":                return 12;            default:                throw new Zend_Date_Exception('Month ($name) is not a known month');        }    }    /**     * Sets the given date as new date or a given datepart as new datepart returning the new datepart     * This could be for example a localized dayname, the date without time,     * the month or only the seconds. There are about 50 different supported date parts.     * For a complete list of supported datepart values look into the docu     *     * @param  string|integer|Zend_Date  $date    Date or datepart to set     * @param  string                    $part    OPTIONAL Part of the date to set, if null the timestamp is set     * @param  string|Zend_Locale        $locale  OPTIONAL Locale for parsing input     * @return integer|string  new datepart     * @throws Zend_Date_Exception     */    public function set($date, $part = null, $locale = null)    {        $result = $this->_calculate('set', $date, $part, $locale);        return $result;    }    /**     * Adds a date or datepart to the existing date, by extracting $part from $date,     * and modifying this object by adding that part.  The $part is then extracted from     * this object and returned as an integer or numeric string (for large values, or $part's     * corresponding to pre-defined formatted date strings).     * This could be for example a ISO 8601 date, the hour the monthname or only the minute.     * There are about 50 different supported date parts.     * For a complete list of supported datepart values look into the docu.     *     * @param  string|integer|Zend_Date  $date    Date or datepart to add     * @param  string                    $part    OPTIONAL Part of the date to add, if null the timestamp is added     * @param  string|Zend_Locale        $locale  OPTIONAL Locale for parsing input     * @return integer|string  new datepart     * @throws Zend_Date_Exception     */    public function add($date, $part = null, $locale = null)    {        $this->_calculate('add', $date, $part, $locale);        $result = $this->get($part, $locale);        return $result;    }    /**     * Subtracts a date from another date.     * This could be for example a RFC2822 date, the time,     * the year or only the timestamp. There are about 50 different supported date parts.     * For a complete list of supported datepart values look into the docu     * Be aware: Adding -2 Months is not equal to Subtracting 2 Months !!!     *     * @param  string|integer|Zend_Date  $date    Date or datepart to subtract     * @param  string                    $part    OPTIONAL Part of the date to sub, if null the timestamp is subtracted     * @param  string|Zend_Locale        $locale  OPTIONAL Locale for parsing input     * @return integer|string  new datepart     * @throws Zend_Date_Exception     */    public function sub($date, $part = null, $locale = null)    {        $this->_calculate('sub', $date, $part, $locale);        $result = $this->get($part, $locale);        return $result;    }    /**     * Compares a date or datepart with the existing one.     * Returns -1 if earlier, 0 if equal and 1 if later.     *     * @param  string|integer|Zend_Date  $date    Date or datepart to compare with the date object     * @param  string                    $part    OPTIONAL Part of the date to compare, if null the timestamp is subtracted     * @param  string|Zend_Locale        $locale  OPTIONAL Locale for parsing input     * @return integer  0 = equal, 1 = later, -1 = earlier     * @throws Zend_Date_Exception     */    public function compare($date, $part = null, $locale = null)    {        $compare = $this->_calculate('cmp', $date, $part, $locale);        if ($compare > 0) {            return 1;        } else if ($compare < 0) {            return -1;        }        return 0;    }    /**     * Returns a new instance of Zend_Date with the selected part copied.     * To make an exact copy, use PHP's clone keyword.     * For a complete list of supported date part values look into the docu.     * If a date part is copied, all other date parts are set to standard values.     * For example: If only YEAR is copied, the returned date object is equal to     * 01-01-YEAR 00:00:00 (01-01-1970 00:00:00 is equal to timestamp 0)     * If only HOUR is copied, the returned date object is equal to     * 01-01-1970 HOUR:00:00 (so $this contains a timestamp equal to a timestamp of 0 plus HOUR).     *     * @param  string              $part    Part of the date to compare, if null the timestamp is subtracted     * @param  string|Zend_Locale  $locale  OPTIONAL New object's locale.  No adjustments to timezone are made.     * @return Zend_Date     */    public function copyPart($part, $locale = null)    {        $clone = clone $this;           // copy all instance variables        $clone->setUnixTimestamp(0);    // except the timestamp        if ($locale != null) {            $clone->setLocale($locale); // set an other locale if selected        }        $clone->set($this, $part);        return $clone;    }    /**     * Calculates the date or object     *     * @param  string                    $calc  Calculation to make     * @param  string|integer            $date  Date for calculation     * @param  string|integer            $comp  Second date for calculation     * @return integer|string|Zend_Date  new timestamp or Zend_Date depending on calculation     */    private function _assign($calc, $date, $comp = 0)    {        switch ($calc) {            case 'set' :                if (!empty($comp)) {                    $this->setUnixTimestamp(call_user_func(Zend_Locale_Math::$sub, $this->getUnixTimestamp(), $comp));                }                $this->setUnixTimestamp(call_user_func(Zend_Locale_Math::$add, $this->getUnixTimestamp(), $date));                return $this->getUnixTimestamp();                break;            case 'add' :                $this->setUnixTimestamp(call_user_func(Zend_Locale_Math::$add, $this->getUnixTimestamp(), $date));                return $this->getUnixTimestamp();                break;            case 'sub' :                $this->setUnixTimestamp(call_user_func(Zend_Locale_Math::$sub, $this->getUnixTimestamp(), $date));                return $this->getUnixTimestamp();                break;            default :                // cmp - compare                return call_user_func(Zend_Locale_Math::$comp, $comp, $date);                break;        }    }    /**     * Calculates the date or object     *     * @param  string                    $calc    Calculation to make, one of: 'add'|'sub'|'cmp'|'copy'|'set'     * @param  string|integer|Zend_Date  $date    Date or datepart to calculate with     * @param  string                    $part    Part of the date to calculate, if null the timestamp is used     * @param  string|Zend_Locale        $locale  Locale for parsing input     * @return integer|string|Zend_Date  new timestamp     * @throws Zend_Date_Exception     */    private function _calculate($calc, $date, $part, $locale)    {        if (is_null($date)) {            throw new Zend_Date_Exception('parameter $date must be set, null is not allowed');        }        if (Zend_Locale::isLocale($part)) {            $locale = $part;            $part = null;        }        if ($locale === null) {            $locale = $this->getLocale();        }        if ($locale instanceof Zend_Locale) {            $locale = $locale->toString();        }        // create date parts        $year   = $this->get(Zend_Date::YEAR);        $month  = $this->get(Zend_Date::MONTH_SHORT);        $day    = $this->get(Zend_Date::DAY_SHORT);        $hour   = $this->get(Zend_Date::HOUR_SHORT);        $minute = $this->get(Zend_Date::MINUTE_SHORT);        $second = $this->get(Zend_Date::SECOND_SHORT);        // if object extract value        if ($date instanceof Zend_Date) {            $date = $date->get($part, $locale);        }        // $date as object, part of foreign date as own date        switch($part) {            // day formats            case Zend_Date::DAY :                if (is_numeric($date)) {                    return $this->_assign($calc, $this->mktime(0, 0, 0, 1, 1 + intval($date), 1970, true),                                                 $this->mktime(0, 0, 0, 1, 1 + intval($day),  1970, true));                }                throw new Zend_Date_Exception("invalid date ($date) operand, day expected", $date);                break;            case Zend_Date::WEEKDAY_SHORT :                $daylist = Zend_Locale_Data::getContent($locale, 'daylist', array('gregorian', 'format', 'wide'));                $weekday = (int) $this->get(Zend_Date::WEEKDAY_DIGIT, $locale);                $cnt = 0;                foreach ($daylist as $key => $value) {                    if (strtoupper(substr($value, 0, 3)) == strtoupper($date)) {                         $found = $cnt;                        break;                    }                    ++$cnt;                }                // Weekday found                if ($cnt < 7) {                    return $this->_assign($calc, $this->mktime(0, 0, 0, 1, 1 + $found,   1970, true),                                                 $this->mktime(0, 0, 0, 1, 1 + $weekday, 1970, true));                }                // Weekday not found                throw new Zend_Date_Exception("invalid date ($date) operand, weekday expected", $date);                break;            case Zend_Date::DAY_SHORT :                if (is_numeric($date)) {                    return $this->_assign($calc, $this->mktime(0, 0, 0, 1, 1 + intval($date), 1970, true),                                                 $this->mktime(0, 0, 0, 1, 1 + intval($day),  1970, true));                }                throw new Zend_Date_Exception("invalid date ($date) operand, day expected", $date);                break;            case Zend_Date::WEEKDAY :                $daylist = Zend_Locale_Data::getContent($locale, 'daylist', array('gregorian', 'format', 'wide'));                $weekday = (int) $this->get(Zend_Date::WEEKDAY_DIGIT, $locale);                $cnt = 0;                foreach ($daylist as $key => $value) {                    if (strtoupper($value) == strtoupper($date)) {                        $found = $cnt;                        break;                    }                    ++$cnt;                }                // Weekday found                if ($cnt < 7) {                    return $this->_assign($calc, $this->mktime(0, 0, 0, 1, 1 + $found,   1970, true),                                                 $this->mktime(0, 0, 0, 1, 1 + $weekday, 1970, true));

⌨️ 快捷键说明

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