date.php
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· PHP 代码 · 共 1,660 行 · 第 1/5 页
PHP
1,660 行
break;
case Zend_Date::TIME_MEDIUM :
$time = Zend_Locale_Data::getContent($locale, 'timeformat', array('gregorian', 'medium'));
return $this->toString($time['pattern'], 'iso', $locale);
break;
case Zend_Date::TIME_SHORT :
$time = Zend_Locale_Data::getContent($locale, 'timeformat', array('gregorian', 'short'));
return $this->toString($time['pattern'], 'iso', $locale);
break;
case Zend_Date::ATOM :
return $this->date('Y\-m\-d\TH\:i\:sP', $this->getUnixTimestamp(), false);
break;
case Zend_Date::COOKIE :
return $this->date('l\, d\-M\-y H\:i\:s e', $this->getUnixTimestamp(), false);
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 :
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?