示例#1
0
 /**
  * Internal parsing method
  *
  * @param string $token
  * @param string $locale
  * @return string
  */
 private function _parseIsoToDate($token, $locale)
 {
     switch ($token) {
         case self::DAY:
             return 'd';
             break;
         case self::WEEKDAY_SHORT:
             $weekday = strtolower($this->date('D', $this->getUnixTimestamp(), false));
             $day = Cldr::getContent($locale, 'day', array('gregorian', 'format', 'wide', $weekday));
             return $this->_toComment(iconv_substr($day, 0, 3, 'UTF-8'));
             break;
         case self::DAY_SHORT:
             return 'j';
             break;
         case self::WEEKDAY:
             $weekday = strtolower($this->date('D', $this->getUnixTimestamp(), false));
             return $this->_toComment(Cldr::getContent($locale, 'day', array('gregorian', 'format', 'wide', $weekday)));
             break;
         case self::WEEKDAY_8601:
             return 'N';
             break;
         case 'ee':
             return $this->_toComment(str_pad($this->date('N', $this->getUnixTimestamp(), false), 2, '0', STR_PAD_LEFT));
             break;
         case self::DAY_SUFFIX:
             return 'S';
             break;
         case self::WEEKDAY_DIGIT:
             return 'w';
             break;
         case self::DAY_OF_YEAR:
             return 'z';
             break;
         case 'DDD':
             return $this->_toComment(str_pad($this->date('z', $this->getUnixTimestamp(), false), 3, '0', STR_PAD_LEFT));
             break;
         case 'DD':
             return $this->_toComment(str_pad($this->date('z', $this->getUnixTimestamp(), false), 2, '0', STR_PAD_LEFT));
             break;
         case self::WEEKDAY_NARROW:
         case 'EEEEE':
             $weekday = strtolower($this->date('D', $this->getUnixTimestamp(), false));
             $day = Cldr::getContent($locale, 'day', array('gregorian', 'format', 'abbreviated', $weekday));
             return $this->_toComment(iconv_substr($day, 0, 1, 'UTF-8'));
             break;
         case self::WEEKDAY_NAME:
             $weekday = strtolower($this->date('D', $this->getUnixTimestamp(), false));
             return $this->_toComment(Cldr::getContent($locale, 'day', array('gregorian', 'format', 'abbreviated', $weekday)));
             break;
         case 'w':
             $week = $this->date('W', $this->getUnixTimestamp(), false);
             return $this->_toComment($week[0] == '0' ? $week[1] : $week);
             break;
         case self::WEEK:
             return 'W';
             break;
         case self::MONTH_NAME:
             $month = $this->date('n', $this->getUnixTimestamp(), false);
             return $this->_toComment(Cldr::getContent($locale, 'month', array('gregorian', 'format', 'wide', $month)));
             break;
         case self::MONTH:
             return 'm';
             break;
         case self::MONTH_NAME_SHORT:
             $month = $this->date('n', $this->getUnixTimestamp(), false);
             return $this->_toComment(Cldr::getContent($locale, 'month', array('gregorian', 'format', 'abbreviated', $month)));
             break;
         case self::MONTH_SHORT:
             return 'n';
             break;
         case self::MONTH_DAYS:
             return 't';
             break;
         case self::MONTH_NAME_NARROW:
             $month = $this->date('n', $this->getUnixTimestamp(), false);
             $mon = Cldr::getContent($locale, 'month', array('gregorian', 'format', 'abbreviated', $month));
             return $this->_toComment(iconv_substr($mon, 0, 1, 'UTF-8'));
             break;
         case self::LEAPYEAR:
             return 'L';
             break;
         case self::YEAR_8601:
             return 'o';
             break;
         case self::YEAR:
             return 'Y';
             break;
         case self::YEAR_SHORT:
             return 'y';
             break;
         case self::YEAR_SHORT_8601:
             return $this->_toComment(substr($this->date('o', $this->getUnixTimestamp(), false), -2, 2));
             break;
         case self::MERIDIEM:
             $am = $this->date('a', $this->getUnixTimestamp(), false);
             if ($am == 'am') {
                 return $this->_toComment(Cldr::getContent($locale, 'am'));
             }
             return $this->_toComment(Cldr::getContent($locale, 'pm'));
             break;
         case self::SWATCH:
             return 'B';
             break;
         case self::HOUR_SHORT_AM:
             return 'g';
             break;
         case self::HOUR_SHORT:
             return 'G';
             break;
         case self::HOUR_AM:
             return 'h';
             break;
         case self::HOUR:
             return 'H';
             break;
         case self::MINUTE:
             return $this->_toComment(str_pad($this->date('i', $this->getUnixTimestamp(), false), 2, '0', STR_PAD_LEFT));
             break;
         case self::SECOND:
             return $this->_toComment(str_pad($this->date('s', $this->getUnixTimestamp(), false), 2, '0', STR_PAD_LEFT));
             break;
         case self::MINUTE_SHORT:
             return 'i';
             break;
         case self::SECOND_SHORT:
             return 's';
             break;
         case self::MILLISECOND:
             return $this->_toComment($this->getMilliSecond());
             break;
         case self::TIMEZONE_NAME:
         case 'vvvv':
             return 'e';
             break;
         case self::DAYLIGHT:
             return 'I';
             break;
         case self::GMT_DIFF:
         case 'ZZ':
         case 'ZZZ':
             return 'O';
             break;
         case self::GMT_DIFF_SEP:
             return 'P';
             break;
         case self::TIMEZONE:
         case 'v':
         case 'zz':
         case 'zzz':
             return 'T';
             break;
         case self::TIMEZONE_SECS:
             return 'Z';
             break;
         case self::ISO_8601:
             return 'c';
             break;
         case self::RFC_2822:
             return 'r';
             break;
         case self::TIMESTAMP:
             return 'U';
             break;
         case self::ERA:
         case 'GG':
         case 'GGG':
             $year = $this->date('Y', $this->getUnixTimestamp(), false);
             if ($year < 0) {
                 return $this->_toComment(Cldr::getContent($locale, 'era', array('gregorian', 'Abbr', '0')));
             }
             return $this->_toComment(Cldr::getContent($locale, 'era', array('gregorian', 'Abbr', '1')));
             break;
         case self::ERA_NARROW:
             $year = $this->date('Y', $this->getUnixTimestamp(), false);
             if ($year < 0) {
                 return $this->_toComment(iconv_substr(Cldr::getContent($locale, 'era', array('gregorian', 'Abbr', '0')), 0, 1, 'UTF-8')) . '.';
             }
             return $this->_toComment(iconv_substr(Cldr::getContent($locale, 'era', array('gregorian', 'Abbr', '1')), 0, 1, 'UTF-8')) . '.';
             break;
         case self::ERA_NAME:
             $year = $this->date('Y', $this->getUnixTimestamp(), false);
             if ($year < 0) {
                 return $this->_toComment(Cldr::getContent($locale, 'era', array('gregorian', 'Names', '0')));
             }
             return $this->_toComment(Cldr::getContent($locale, 'era', array('gregorian', 'Names', '1')));
             break;
         case self::DATES:
             return $this->_toToken(Format::getDateFormat($locale), $locale);
             break;
         case self::DATE_FULL:
             return $this->_toToken(Cldr::getContent($locale, 'date', array('gregorian', 'full')), $locale);
             break;
         case self::DATE_LONG:
             return $this->_toToken(Cldr::getContent($locale, 'date', array('gregorian', 'long')), $locale);
             break;
         case self::DATE_MEDIUM:
             return $this->_toToken(Cldr::getContent($locale, 'date', array('gregorian', 'medium')), $locale);
             break;
         case self::DATE_SHORT:
             return $this->_toToken(Cldr::getContent($locale, 'date', array('gregorian', 'short')), $locale);
             break;
         case self::TIMES:
             return $this->_toToken(Format::getTimeFormat($locale), $locale);
             break;
         case self::TIME_FULL:
             return $this->_toToken(Cldr::getContent($locale, 'time', 'full'), $locale);
             break;
         case self::TIME_LONG:
             return $this->_toToken(Cldr::getContent($locale, 'time', 'long'), $locale);
             break;
         case self::TIME_MEDIUM:
             return $this->_toToken(Cldr::getContent($locale, 'time', 'medium'), $locale);
             break;
         case self::TIME_SHORT:
             return $this->_toToken(Cldr::getContent($locale, 'time', 'short'), $locale);
             break;
         case self::DATETIME:
             return $this->_toToken(Format::getDateTimeFormat($locale), $locale);
             break;
         case self::DATETIME_FULL:
             return $this->_toToken(Cldr::getContent($locale, 'datetime', array('gregorian', 'full')), $locale);
             break;
         case self::DATETIME_LONG:
             return $this->_toToken(Cldr::getContent($locale, 'datetime', array('gregorian', 'long')), $locale);
             break;
         case self::DATETIME_MEDIUM:
             return $this->_toToken(Cldr::getContent($locale, 'datetime', array('gregorian', 'medium')), $locale);
             break;
         case self::DATETIME_SHORT:
             return $this->_toToken(Cldr::getContent($locale, 'datetime', array('gregorian', 'short')), $locale);
             break;
         case self::ATOM:
             return 'Y\\-m\\-d\\TH\\:i\\:sP';
             break;
         case self::COOKIE:
             return 'l\\, d\\-M\\-y H\\:i\\:s e';
             break;
         case self::RFC_822:
             return 'D\\, d M y H\\:i\\:s O';
             break;
         case self::RFC_850:
             return 'l\\, d\\-M\\-y H\\:i\\:s e';
             break;
         case self::RFC_1036:
             return 'D\\, d M y H\\:i\\:s O';
             break;
         case self::RFC_1123:
             return 'D\\, d M Y H\\:i\\:s O';
             break;
         case self::RFC_3339:
             return 'Y\\-m\\-d\\TH\\:i\\:sP';
             break;
         case self::RSS:
             return 'D\\, d M Y H\\:i\\:s O';
             break;
         case self::W3C:
             return 'Y\\-m\\-d\\TH\\:i\\:sP';
             break;
     }
     if ($token == '') {
         return '';
     }
     switch ($token[0]) {
         case 'y':
             if (strlen($token) == 4 && abs($this->getUnixTimestamp()) <= 0x7fffffff) {
                 return 'Y';
             }
             $length = iconv_strlen($token, 'UTF-8');
             return $this->_toComment(str_pad($this->date('Y', $this->getUnixTimestamp(), false), $length, '0', STR_PAD_LEFT));
             break;
         case 'Y':
             if (strlen($token) == 4 && abs($this->getUnixTimestamp()) <= 0x7fffffff) {
                 return 'o';
             }
             $length = iconv_strlen($token, 'UTF-8');
             return $this->_toComment(str_pad($this->date('o', $this->getUnixTimestamp(), false), $length, '0', STR_PAD_LEFT));
             break;
         case 'A':
             $length = iconv_strlen($token, 'UTF-8');
             $result = substr($this->getMilliSecond(), 0, 3);
             $result += $this->date('s', $this->getUnixTimestamp(), false) * 1000;
             $result += $this->date('i', $this->getUnixTimestamp(), false) * 60000;
             $result += $this->date('H', $this->getUnixTimestamp(), false) * 3600000;
             return $this->_toComment(str_pad($result, $length, '0', STR_PAD_LEFT));
             break;
     }
     return $this->_toComment($token);
 }