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 + -
显示快捷键?