/** * return date in user timezone */ public function getUserDate() { // get user session $session = new Zend_Session_Namespace('user'); // return date with user timezone in locale format return $this->getDate($session->timezone)->toString(Zend_Locale_Format::getDateTimeFormat($session->language)); }
/** * 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 = Zend_Locale_Data::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(Zend_Locale_Data::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 = Zend_Locale_Data::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(Zend_Locale_Data::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(Zend_Locale_Data::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(Zend_Locale_Data::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 = Zend_Locale_Data::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(Zend_Locale_Data::getContent($locale, 'am')); } return $this->_toComment(Zend_Locale_Data::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(Zend_Locale_Data::getContent($locale, 'era', array('gregorian', 'Abbr', '0'))); } return $this->_toComment(Zend_Locale_Data::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(Zend_Locale_Data::getContent($locale, 'era', array('gregorian', 'Abbr', '0')), 0, 1, 'UTF-8')) . '.'; } return $this->_toComment(iconv_substr(Zend_Locale_Data::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(Zend_Locale_Data::getContent($locale, 'era', array('gregorian', 'Names', '0'))); } return $this->_toComment(Zend_Locale_Data::getContent($locale, 'era', array('gregorian', 'Names', '1'))); break; case self::DATES: return $this->_toToken(Zend_Locale_Format::getDateFormat($locale), $locale); break; case self::DATE_FULL: return $this->_toToken(Zend_Locale_Data::getContent($locale, 'date', array('gregorian', 'full')), $locale); break; case self::DATE_LONG: return $this->_toToken(Zend_Locale_Data::getContent($locale, 'date', array('gregorian', 'long')), $locale); break; case self::DATE_MEDIUM: return $this->_toToken(Zend_Locale_Data::getContent($locale, 'date', array('gregorian', 'medium')), $locale); break; case self::DATE_SHORT: return $this->_toToken(Zend_Locale_Data::getContent($locale, 'date', array('gregorian', 'short')), $locale); break; case self::TIMES: return $this->_toToken(Zend_Locale_Format::getTimeFormat($locale), $locale); break; case self::TIME_FULL: return $this->_toToken(Zend_Locale_Data::getContent($locale, 'time', 'full'), $locale); break; case self::TIME_LONG: return $this->_toToken(Zend_Locale_Data::getContent($locale, 'time', 'long'), $locale); break; case self::TIME_MEDIUM: return $this->_toToken(Zend_Locale_Data::getContent($locale, 'time', 'medium'), $locale); break; case self::TIME_SHORT: return $this->_toToken(Zend_Locale_Data::getContent($locale, 'time', 'short'), $locale); break; case self::DATETIME: return $this->_toToken(Zend_Locale_Format::getDateTimeFormat($locale), $locale); break; case self::DATETIME_FULL: return $this->_toToken(Zend_Locale_Data::getContent($locale, 'datetime', array('gregorian', 'full')), $locale); break; case self::DATETIME_LONG: return $this->_toToken(Zend_Locale_Data::getContent($locale, 'datetime', array('gregorian', 'long')), $locale); break; case self::DATETIME_MEDIUM: return $this->_toToken(Zend_Locale_Data::getContent($locale, 'datetime', array('gregorian', 'medium')), $locale); break; case self::DATETIME_SHORT: return $this->_toToken(Zend_Locale_Data::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); }