/** * Handles DateTime fields * * @param DataEvent $event */ public function onDataReady(DataEvent $event) { $data = array(); foreach ($event->getData() as $key => $row) { foreach ($row as $field => $value) { if ($value instanceof \DateTime) { $formatter = \IntlDateFormatter::create($this->locale, static::$formats[$this->dateFormat], static::$formats[$this->timeFormat], $this->timezone, IntlDateFormatter::GREGORIAN, $this->format); if (!$formatter) { $formatter = IntlDateFormatter::create('en', static::$formats[$this->dateFormat], static::$formats[$this->timeFormat], $this->timezone, \IntlDateFormatter::GREGORIAN, $this->format); } $value = $formatter->format($value->getTimestamp()); } $data[$key][$field] = $value; } } $event->setData($data); }
/** * @expectedException \Symfony\Component\Intl\Exception\NotImplementedException */ public function testFormatWithUnimplementedChars() { $pattern = 'Y'; $formatter = new IntlDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, 'UTC', IntlDateFormatter::GREGORIAN, $pattern); $formatter->format(0); }
/** * Returns formatted date/time, correspondent to a given language. * The given date should be in the timezone chosen by the administrator and/or user. Use api_get_local_time to get it. * * @author Patrick Cool <*****@*****.**>, Ghent University * @author Christophe Gesche<*****@*****.**> * originally inspired from from PhpMyAdmin * @author Ivan Tcholakov, 2009, code refactoring, adding support for predefined date/time formats. * @author Guillaume Viguier <*****@*****.**> * * @param mixed Timestamp or datetime string * @param mixed Date format (string or int; see date formats in the Chamilo system: TIME_NO_SEC_FORMAT, DATE_FORMAT_SHORT, DATE_FORMAT_LONG, DATE_TIME_FORMAT_LONG) * @param string $language (optional) Language indentificator. If it is omited, the current interface language is assumed. * @return string Returns the formatted date. * * @link http://php.net/manual/en/function.strftime.php */ function api_format_date($time, $format = null, $language = null) { if (is_string($time)) { $time = strtotime($time); } if (is_null($format)) { $format = DATE_TIME_FORMAT_LONG; } $datetype = null; $timetype = null; if (is_int($format)) { switch ($format) { case DATE_FORMAT_ONLY_DAYNAME: $datetype = IntlDateFormatter::SHORT; $timetype = IntlDateFormatter::NONE; break; case DATE_FORMAT_NUMBER_NO_YEAR: $datetype = IntlDateFormatter::SHORT; $timetype = IntlDateFormatter::NONE; break; case DATE_FORMAT_NUMBER: $datetype = IntlDateFormatter::SHORT; $timetype = IntlDateFormatter::NONE; break; case TIME_NO_SEC_FORMAT: $datetype = IntlDateFormatter::NONE; $timetype = IntlDateFormatter::SHORT; break; case DATE_FORMAT_SHORT: $datetype = IntlDateFormatter::LONG; $timetype = IntlDateFormatter::NONE; break; case DATE_FORMAT_LONG: $datetype = IntlDateFormatter::FULL; $timetype = IntlDateFormatter::NONE; break; case DATE_TIME_FORMAT_LONG: $datetype = IntlDateFormatter::FULL; $timetype = IntlDateFormatter::SHORT; break; case DATE_FORMAT_LONG_NO_DAY: $datetype = IntlDateFormatter::FULL; $timetype = IntlDateFormatter::SHORT; break; case DATE_TIME_FORMAT_SHORT: $datetype = IntlDateFormatter::FULL; $timetype = IntlDateFormatter::SHORT; break; case DATE_TIME_FORMAT_SHORT_TIME_FIRST: $datetype = IntlDateFormatter::FULL; $timetype = IntlDateFormatter::SHORT; break; case DATE_TIME_FORMAT_LONG_24H: $datetype = IntlDateFormatter::FULL; $timetype = IntlDateFormatter::SHORT; break; default: $datetype = IntlDateFormatter::FULL; $timetype = IntlDateFormatter::SHORT; } } // Use ICU if (is_null($language)) { $language = api_get_language_isocode(); } $date_formatter = new IntlDateFormatter($language, $datetype, $timetype, date_default_timezone_get()); $formatted_date = api_to_system_encoding($date_formatter->format($time), 'UTF-8'); return $formatted_date; }