date.php
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· PHP 代码 · 共 1,660 行 · 第 1/5 页
PHP
1,660 行
* 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
* r - RFC2822 format, U - unix timestamp
*
* Not supported ISO tokens are
* u - extended year, Q - quarter, q - quarter, L - stand alone month, W - week of month
* F - day of week of month, g - modified julian, c - stand alone weekday, k - hour 0-11, K - hour 1-24
* v - wall zone
*
* @param string $format OPTIONAL Rule for formatting output. If null the default date format is used
* @param string $type OPTIONAL Type for the format string which overrides the standard setting
* @param string|Zend_Locale $locale OPTIONAL Locale for parsing input
* @return string
*/
public function toString($format = null, $type = null, $locale = null)
{
if (Zend_Locale::isLocale($format)) {
$locale = $format;
$format = null;
}
if (Zend_Locale::isLocale($type)) {
$locale = $type;
$type = null;
}
if ($locale === null) {
$locale = $this->getLocale();
}
if ($format === null) {
$format = Zend_Locale_Format::getDateFormat($locale) . ' ' . Zend_Locale_Format::getTimeFormat($locale);
} else if (((self::$_Options['format_type'] == 'php') && ($type === null)) or ($type == 'php')) {
$format = Zend_Locale_Format::convertPhpToIsoFormat($format);
}
// get format tokens
$j = 0;
$comment = false;
$output = array();
for($i = 0; $i < strlen($format); ++$i) {
if ($format[$i] == "'") {
if ($comment == false) {
$comment = true;
++$j;
$output[$j] = "'";
} else if (isset($format[$i+1]) and ($format[$i+1] == "'")) {
$output[$j] .= "'";
++$i;
} else {
$comment = false;
}
continue;
}
if (isset($output[$j]) and ($output[$j][0] == $format[$i]) or
($comment == true)) {
$output[$j] .= $format[$i];
} else {
++$j;
$output[$j] = $format[$i];
}
}
$notset = false;
// fill format tokens with date information
for($i = 1; $i <= count($output); ++$i) {
// fill fixed tokens
switch ($output[$i]) {
// special formats
case 'SS' :
$output[$i] = $this->date('S', $this->getUnixTimestamp(), false);
break;
case 'eee' :
$output[$i] = $this->date('N', $this->getUnixTimestamp(), false);
break;
case 'ddd' :
$output[$i] = $this->date('t', $this->getUnixTimestamp(), false);
break;
case 'l' :
$output[$i] = $this->date('L', $this->getUnixTimestamp(), false);
break;
case 'B' :
$output[$i] = $this->date('B', $this->getUnixTimestamp(), false);
break;
case 'I' :
$output[$i] = $this->date('I', $this->getUnixTimestamp(), false);
break;
case 'X' :
$output[$i] = $this->date('Z', $this->getUnixTimestamp(), false);
break;
case 'r' :
$output[$i] = $this->date('r', $this->getUnixTimestamp(), false);
break;
case 'U' :
$output[$i] = $this->getUnixTimestamp();
break;
// eras
case 'GGGGG' :
$output[$i] = substr($this->get(Zend_Date::ERA, $locale), 0, 1) . ".";
break;
case 'GGGG' :
$output[$i] = $this->get(Zend_Date::ERA_NAME, $locale);
break;
case 'GGG' :
case 'GG' :
case 'G' :
$output[$i] = $this->get(Zend_Date::ERA, $locale);
break;
// years
case 'yy' :
$output[$i] = $this->get(Zend_Date::YEAR_SHORT, $locale);
break;
// ISO years
case 'YY' :
$output[$i] = $this->get(Zend_Date::YEAR_SHORT_8601, $locale);
break;
// months
case 'MMMMM' :
$output[$i] = substr($this->get(Zend_Date::MONTH_NAME_NARROW, $locale), 0, 1);
break;
case 'MMMM' :
$output[$i] = $this->get(Zend_Date::MONTH_NAME, $locale);
break;
case 'MMM' :
$output[$i] = $this->get(Zend_Date::MONTH_NAME_SHORT, $locale);
break;
case 'MM' :
$output[$i] = $this->get(Zend_Date::MONTH, $locale);
break;
case 'M' :
$output[$i] = $this->get(Zend_Date::MONTH_SHORT, $locale);
break;
// week
case 'ww' :
$output[$i] = str_pad($this->get(Zend_Date::WEEK, $locale), 2, '0', STR_PAD_LEFT);
break;
case 'w' :
$output[$i] = $this->get(Zend_Date::WEEK, $locale);
break;
// monthday
case 'dd' :
$output[$i] = $this->get(Zend_Date::DAY, $locale);
break;
case 'd' :
$output[$i] = $this->get(Zend_Date::DAY_SHORT, $locale);
break;
// yearday
case 'DDD' :
$output[$i] = str_pad($this->get(Zend_Date::DAY_OF_YEAR, $locale), 3, '0', STR_PAD_LEFT);
break;
case 'DD' :
$output[$i] = str_pad($this->get(Zend_Date::DAY_OF_YEAR, $locale), 2, '0', STR_PAD_LEFT);
break;
case 'D' :
$output[$i] = $this->get(Zend_Date::DAY_OF_YEAR, $locale);
break;
// weekday
case 'EEEEE' :
$output[$i] = $this->get(Zend_Date::WEEKDAY_NARROW, $locale);
break;
case 'EEEE' :
$output[$i] = $this->get(Zend_Date::WEEKDAY, $locale);
break;
case 'EEE' :
$output[$i] = $this->get(Zend_Date::WEEKDAY_SHORT, $locale);
break;
case 'EE' :
$output[$i] = $this->get(Zend_Date::WEEKDAY_NAME, $locale);
break;
case 'E' :
$output[$i] = $this->get(Zend_Date::WEEKDAY_NARROW, $locale);
break;
// weekday number
case 'ee' :
$output[$i] = str_pad($this->get(Zend_Date::WEEKDAY_8601, $locale), 2, '0', STR_PAD_LEFT);
break;
case 'e' :
$output[$i] = $this->get(Zend_Date::WEEKDAY_8601, $locale);
break;
// period
case 'a' :
$output[$i] = $this->get(Zend_Date::MERIDIEM, $locale);
break;
// hour
case 'hh' :
$output[$i] = $this->get(Zend_Date::HOUR_AM, $locale);
break;
case 'h' :
$output[$i] = $this->get(Zend_Date::HOUR_SHORT_AM, $locale);
break;
case 'HH' :
$output[$i] = $this->get(Zend_Date::HOUR, $locale);
break;
case 'H' :
$output[$i] = $this->get(Zend_Date::HOUR_SHORT, $locale);
break;
// minute
case 'mm' :
$output[$i] = $this->get(Zend_Date::MINUTE, $locale);
break;
case 'm' :
$output[$i] = $this->get(Zend_Date::MINUTE_SHORT, $locale);
break;
// second
case 'ss' :
$output[$i] = $this->get(Zend_Date::SECOND, $locale);
break;
case 's' :
$output[$i] = $this->get(Zend_Date::SECOND_SHORT, $locale);
break;
case 'S' :
$output[$i] = $this->get(Zend_Date::MILLISECOND, $locale);
break;
// zone
case 'zzzz' :
$output[$i] = $this->get(Zend_Date::TIMEZONE_NAME, $locale);
break;
case 'zzz' :
case 'zz' :
case 'z' :
$output[$i] = $this->get(Zend_Date::TIMEZONE, $locale);
break;
// zone offset
case 'ZZZZ' :
$output[$i] = $this->get(Zend_Date::GMT_DIFF_SEP, $locale);
break;
case 'ZZZ' :
case 'ZZ' :
case 'Z' :
$output[$i] = $this->get(Zend_Date::GMT_DIFF, $locale);
break;
default :
$notset = true;
break;
}
// fill variable tokens
if ($notset == true) {
if (($output[$i][0] !== "'") and (preg_match('/y+/', $output[$i]))) {
$length = strlen($output[$i]);
$output[$i] = $this->get(Zend_Date::YEAR, $locale);
$output[$i] = str_pad($output[$i], $length, '0', STR_PAD_LEFT);
}
if (($output[$i][0] !== "'") and (preg_match('/Y+/', $output[$i]))) {
$length = strlen($output[$i]);
$output[$i] = $this->get(Zend_Date::YEAR_8601, $locale);
$output[$i] = str_pad($output[$i], $length, '0', STR_PAD_LEFT);
}
if (($output[$i][0] !== "'") and (preg_match('/A+/', $output[$i]))) {
$length = strlen($output[$i]);
$seconds = $this->get(Zend_Date::TIMESTAMP, $locale);
$month = $this->get(Zend_Date::MONTH_SHORT, $locale);
$day = $this->get(Zend_Date::DAY_SHORT, $locale);
$year = $this->get(Zend_Date::YEAR, $locale);
$seconds -= $this->mktime(0, 0, 0, $month, $day, $year, false);
$output[$i] = str_pad($seconds, $length, '0', STR_PAD_LEFT);
}
if ($output[$i][0] === "'") {
$output[$i] = substr($output[$i], 1);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?