date.php

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

PHP
1,660
字号
                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));
                }

                // Weekday not found
                throw new Zend_Date_Exception("invalid date ($date) operand, weekday expected", $date);
                break;

            case Zend_Date::WEEKDAY_8601 :
                $weekday = (int) $this->get(Zend_Date::WEEKDAY_DIGIT, $locale);
                if ((intval($date) > 0) and (intval($date) < 8)) {
                    return $this->_assign($calc, $this->mktime(0, 0, 0, 1, 1 + intval($date), 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_SUFFIX :
                throw new Zend_Date_Exception('day suffix not supported', $date);
                break;

            case Zend_Date::WEEKDAY_DIGIT :
                $weekday = (int) $this->get(Zend_Date::WEEKDAY_DIGIT, $locale);
                if ((intval($date) > 0) and (intval($date) < 8)) {
                    return $this->_assign($calc, $this->mktime(0, 0, 0, 1, 2 + $date,    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_OF_YEAR :
                if (is_numeric($date)) {
                    return $this->_assign($calc, $this->mktime(0, 0, 0, 1,      1 + $date, 1970, true),
                                                 $this->mktime(0, 0, 0, $month, 1 + $day,  1970, true));
                }
                throw new Zend_Date_Exception("invalid date ($date) operand, day expected", $date);
                break;

            case Zend_Date::WEEKDAY_NARROW :
                $daylist = Zend_Locale_Data::getContent($locale, 'daylist', array('gregorian', 'format', 'abbreviated'));
                $weekday = (int) $this->get(Zend_Date::WEEKDAY_DIGIT, $locale);
                $cnt = 0;
                foreach ($daylist as $key => $value) {
                    if (strtoupper(substr($value, 0, 1)) == 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::WEEKDAY_NAME :
                $daylist = Zend_Locale_Data::getContent($locale, 'daylist', array('gregorian', 'format', 'abbreviated'));
                $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));
                }

                // Weekday not found
                throw new Zend_Date_Exception("invalid date ($date) operand, weekday expected", $date);
                break;


            // week formats
            case Zend_Date::WEEK :
                if (is_numeric($date)) {
                    $week = (int) $this->get(Zend_Date::WEEK, $locale);
                    return $this->_assign($calc, parent::mktime(0, 0, 0, 1, 1 + ($date * 7), 1970, true),
                                                 parent::mktime(0, 0, 0, 1, 1 + ($week * 7), 1970, true));
                }
                throw new Zend_Date_Exception("invalid date ($date) operand, week expected", $date);
                break;


            // month formats
            case Zend_Date::MONTH_NAME :
                $monthlist = Zend_Locale_Data::getContent($locale, 'monthlist', array('gregorian', 'format', 'wide'));
                $cnt = 0;
                foreach ($monthlist as $key => $value) {
                    if (strtoupper($value) == strtoupper($date)) {
                        $found = $key;
                        break;
                    }
                    ++$cnt;
                }
                $date = array_search($date, $monthlist);

                // Monthname found
                if ($cnt < 12) {
                    if ($calc == 'add') {
                        $date += $found;
                        $calc = 'set';
                    } else if ($calc == 'sub') {
                        $date = $month - $found;
                        $calc = 'set';
                    }
                    return $this->_assign($calc, $this->mktime(0, 0, 0, $date,  $day, $year, true),
                                                 $this->mktime(0, 0, 0, $month, $day, $year, true));
                }

                // Monthname not found
                throw new Zend_Date_Exception("invalid date ($date) operand, month expected", $date);
                break;

            case Zend_Date::MONTH :
                if (is_numeric($date)) {
                    if ($calc == 'add') {
                        $date += $month;
                        $calc = 'set';
                    } else if ($calc == 'sub') {
                        $date = $month - $date;
                        $calc = 'set';
                    }
                    return $this->_assign($calc, $this->mktime(0, 0, 0, $date, $day, $year, true),
                                                 $this->mktime(0, 0, 0, $month,        $day, $year, true));
                }
                throw new Zend_Date_Exception("invalid date ($date) operand, month expected", $date);
                break;

            case Zend_Date::MONTH_NAME_SHORT :
                $monthlist = Zend_Locale_Data::getContent($locale, 'monthlist', array('gregorian', 'format', 'abbreviated'));
                $cnt = 0;
                foreach ($monthlist as $key => $value) {
                    if (strtoupper($value) == strtoupper($date)) {
                        $found = $key;
                        break;
                    }
                    ++$cnt;
                }
                $date = array_search($date, $monthlist);

                // Monthname found
                if ($cnt < 12) {
                    if ($calc == 'add') {
                        $date += $found;
                        $calc = 'set';
                    } else if ($calc == 'sub') {
                        $date = $month - $found;
                        $calc = 'set';
                    }
                    return $this->_assign($calc, $this->mktime(0, 0, 0, $date,  $day, $year, true),
                                                 $this->mktime(0, 0, 0, $month, $day, $year, true));
                }

                // Monthname not found
                throw new Zend_Date_Exception("invalid date ($date) operand, month expected", $date);
                break;

            case Zend_Date::MONTH_SHORT :
                if (is_numeric($date)) {
                    if ($calc == 'add') {
                        $date += $month;
                        $calc = 'set';
                    } else if ($calc == 'sub') {
                        $date = $month - $date;
                        $calc = 'set';
                    }
                    return $this->_assign($calc, $this->mktime(0, 0, 0, $date,  $day, $year, true),
                                                 $this->mktime(0, 0, 0, $month, $day, $year, true));
                }
                throw new Zend_Date_Exception("invalid date ($date) operand, month expected", $date);
                break;

            case Zend_Date::MONTH_DAYS :
                throw new Zend_Date_Exception('month days not supported', $date);
                break;


            case Zend_Date::MONTH_NAME_NARROW :
                $monthlist = Zend_Locale_Data::getContent($locale, 'monthlist', array('gregorian', 'stand-alone', 'narrow'));
                $cnt = 0;
                foreach ($monthlist as $key => $value) {
                    if (strtoupper($value) == strtoupper($date)) {
                        $found = $key;
                        break;
                    }
                    ++$cnt;
                }
                $date = array_search($date, $monthlist);
                
                // Monthname found
                if ($cnt < 12) {
                    if ($calc == 'add') {
                        $date += $found;
                        $calc = 'set';
                    } else if ($calc == 'sub') {
                        $date = $month - $found;
                        $calc = 'set';
                    }
                    return $this->_assign($calc, $this->mktime(0, 0, 0, $date,  $day, $year, true),
                                                 $this->mktime(0, 0, 0, $month, $day, $year, true));
                }

                // Monthname not found
                throw new Zend_Date_Exception("invalid date ($date) operand, month expected", $date);
                break;


            // year formats
            case Zend_Date::LEAPYEAR :
                throw new Zend_Date_Exception('leap year not supported', $date);
                break;

            case Zend_Date::YEAR_8601 :
                if (is_numeric($date)) {
                    if ($calc == 'add') {
                        $date += $year;
                        $calc = 'set';
                    } else if ($calc == 'sub') {
                        $date = $year - $date;
                        $calc = 'set';
                    }
                    return $this->_assign($calc, $this->mktime(0, 0, 0, $month, $day, intval($date), true),
                                                 $this->mktime(0, 0, 0, $month, $day, $year,         true));
                }
                throw new Zend_Date_Exception("invalid date ($date) operand, year expected", $date);
                break;

            case Zend_Date::YEAR :
                if (is_numeric($date)) {
                    if ($calc == 'add') {
                        $date += $year;
                        $calc = 'set';
                    } else if ($calc == 'sub') {
                        $date = $year - $date;
                        $calc = 'set';
                    }
                    return $this->_assign($calc, $this->mktime(0, 0, 0, $month, $day, intval($date), true),
                                                 $this->mktime(0, 0, 0, $month, $day, $year,         true));
                }
                throw new Zend_Date_Exception("invalid date ($date) operand, year expected", $date);
                break;

            case Zend_Date::YEAR_SHORT :
                if (is_numeric($date)) {
                    $date = intval($date);
                    if (($date >= 0) and ($date <= 100) and ($calc == 'set')) {
                        $date += 1900;
                        if ($date < 1970) {
                            $date += 100;
                        }
                    }
                    if ($calc == 'add') {
                        $date += $year;
                        $calc = 'set';
                    } else if ($calc == 'sub') {
                        $date = $year - $date;
                        $calc = 'set';
                    }
                    return $this->_assign($calc, $this->mktime(0, 0, 0, $month, $day, $date, true),
                                                 $this->mktime(0, 0, 0, $month, $day, $year, true));
                }
                throw new Zend_Date_Exception("invalid date ($date) operand, year expected", $date);
                break;


            case Zend_Date::YEAR_SHORT_8601 :
                if (is_numeric($date)) {
                    $date = intval($date);
                    if (($date >= 0) and ($date <= 100) and ($calc == 'set')) {
                        $date += 1900;
                        if ($date < 1970) {
                            $date += 100;
                        }
                    }
                    if ($calc == 'add') {
                        $date += $year;
                        $calc = 'set';
                    } else if ($calc == 'sub') {
                        $date = $year - $date;
                        $calc = 'set';
                    }
                    return $this->_assign($calc, $this->mktime(0, 0, 0, $month, $day, $date, true),
                                                 $this->mktime(0, 0, 0, $month, $day, $year, true));
                }
                throw new Zend_Date_Exception("invalid date ($date) operand, year expected", $date);
                break;


            // time formats
            case Zend_Date::MERIDIEM :
                throw new Zend_Date_Exception('meridiem not supported', $date);
                break;

            case Zend_Date::SWATCH :
                if (is_numeric($da

⌨️ 快捷键说明

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