/** * Implements what IntlDateFormatter::formatObject() is in PHP 5.5+ * * @param \IntlCalendar|\DateTime $object * @param string|int|array|null $format * @param string|null $locale * @return string * @throws LocalizedException */ protected function doFormatObject($object, $format = null, $locale = null) { $pattern = $dateFormat = $timeFormat = $calendar = null; if (is_array($format)) { list($dateFormat, $timeFormat) = $format; } elseif (is_numeric($format)) { $dateFormat = $format; } elseif (is_string($format) || null == $format) { $dateFormat = $timeFormat = \IntlDateFormatter::MEDIUM; $pattern = $format; } else { throw new LocalizedException(new Phrase('Format type is invalid')); } $timezone = $object->getTimezone(); if ($object instanceof \IntlCalendar) { $timezone = $timezone->toDateTimeZone(); } $timezone = $timezone->getName(); if ($timezone === '+00:00') { $timezone = 'UTC'; } elseif ($timezone[0] === '+' || $timezone[0] === '-') { // $timezone[0] is first symbol of string $timezone = 'GMT' . $timezone; } return (new \IntlDateFormatter($locale, $dateFormat, $timeFormat, $timezone, $calendar, $pattern))->format($object); }
/** * @return mixed[] */ public function formatProvider() { $icuUpToDate = version_compare(Intl::getIcuVersion(), '50.0', '>='); $icuComma = $icuUpToDate ? ',' : ''; $icuAt = $icuUpToDate ? ' at' : ''; $datetime = new \DateTime('2015-01-01 00:00:00', new \DateTimeZone('Europe/Paris')); return ['default' => [$datetime, [], 'Jan 1, 2015' . $icuComma . ' 12:00:00 AM'], 'date_format_none' => [$datetime, ['date_format' => \IntlDateFormatter::NONE], '12:00:00 AM'], 'date_format_shot' => [$datetime, ['date_format' => \IntlDateFormatter::SHORT], '1/1/15' . $icuComma . ' 12:00:00 AM'], 'date_format_medium' => [$datetime, ['date_format' => \IntlDateFormatter::MEDIUM], 'Jan 1, 2015' . $icuComma . ' 12:00:00 AM'], 'date_format_long' => [$datetime, ['date_format' => \IntlDateFormatter::LONG], 'January 1, 2015' . $icuAt . ' 12:00:00 AM'], 'date_format_full' => [$datetime, ['date_format' => \IntlDateFormatter::FULL], 'Thursday, January 1, 2015' . $icuAt . ' 12:00:00 AM'], 'time_format_none' => [$datetime, ['time_format' => \IntlDateFormatter::NONE], 'Jan 1, 2015'], 'time_format_shot' => [$datetime, ['time_format' => \IntlDateFormatter::SHORT], 'Jan 1, 2015' . $icuComma . ' 12:00 AM'], 'time_format_medium' => [$datetime, ['time_format' => \IntlDateFormatter::MEDIUM], 'Jan 1, 2015' . $icuComma . ' 12:00:00 AM'], 'time_format_long' => [$datetime, ['time_format' => \IntlDateFormatter::LONG], 'Jan 1, 2015' . $icuComma . ' 12:00:00 AM GMT+' . ($icuUpToDate ? '1' : '01:00')], 'time_format_full' => [$datetime, ['time_format' => \IntlDateFormatter::FULL], 'Jan 1, 2015' . $icuComma . ' 12:00:00 AM Central European' . ($icuUpToDate ? ' Standard' : '') . ' Time'], 'timezone' => [$datetime, ['timezone' => 'UTC'], 'Dec 31, 2014' . $icuComma . ' 11:00:00 PM'], 'int_timezone' => [$datetime, ['timezone' => \IntlTimeZone::createTimeZone('UTC')], 'Dec 31, 2014' . $icuComma . ' 11:00:00 PM'], 'date_timezone' => [$datetime, ['timezone' => new \DateTimeZone('UTC')], 'Dec 31, 2014' . $icuComma . ' 11:00:00 PM'], 'gregorian_calendar' => [$datetime, ['calendar' => \IntlDateFormatter::GREGORIAN], 'Jan 1, 2015' . $icuComma . ' 12:00:00 AM'], 'intl_calendar' => [$datetime, ['calendar' => \IntlCalendar::createInstance('UTC')], 'Jan 1, 2015' . $icuComma . ' 12:00:00 AM'], 'pattern' => [$datetime, ['pattern' => 'YYYY/MM/dd'], '2015/01/01']]; }
/** * @return array */ protected function getFreeWeekDays() { $freeWeekDays = []; $calendar = \IntlCalendar::createInstance($this->tz, $this->locale); foreach ($this->intlMapping as $intlDay => $manipulatorDay) { $dayOfWeekType = $calendar->getDayOfWeekType($intlDay); $weekEndTransition = $calendar->getWeekendTransition($intlDay); if (\IntlCalendar::DOW_TYPE_WEEKEND === $dayOfWeekType || \IntlCalendar::DOW_TYPE_WEEKEND_OFFSET === $dayOfWeekType && 0 === $weekEndTransition || \IntlCalendar::DOW_TYPE_WEEKEND_CEASE === $dayOfWeekType && 86400000 === $weekEndTransition) { $freeWeekDays[] = $manipulatorDay; } } return $freeWeekDays; }
function getFirstWeekday() { // this works on Linux // http://stackoverflow.com/questions/727471/how-do-i-get-the-first-day-of-the-week-for-the-current-locale-php-l8n $weekday = exec('locale first_weekday'); if ($weekday) { // Returns Monday=2, but we need 1 for Monday // see http://man7.org/linux/man-pages/man5/locale.5.html return --$weekday; } // This would work in PHP 5.5 if (class_exists('IntlCalendar')) { $cal = IntlCalendar::createInstance(); return $cal->getFirstDayOfWeek() == IntlCalendar::DOW_MONDAY ? 1 : 0; } // default to Monday as it's default for "World" in CLDR's supplemental data return 1; }
public function testConfigureOptionsWithIntlCalendar() { $this->type->configureOptions($resolver = new OptionsResolver()); $this->assertSame(['path' => $path = 'path_value', 'calendar' => $calendar = \IntlCalendar::createInstance(), 'date_format' => \IntlDateFormatter::MEDIUM, 'lenient' => false, 'pattern' => null, 'timezone' => null, 'time_format' => \IntlDateFormatter::MEDIUM], $resolver->resolve(['path' => $path, 'calendar' => $calendar])); }
<?php ini_set("intl.error_level", E_WARNING); ini_set("intl.default_locale", "nl"); $intlcal = IntlCalendar::createInstance(); VAR_DUMP($intlcal->getType()); $intlcal = IntlCalendar::createInstance(null, "nl_NL@calendar=hebrew"); VAR_DUMP(intlcal_get_type($intlcal)); ?> ==DONE==
<?php ini_set("intl.error_level", E_WARNING); ini_set("intl.default_locale", "nl"); $intlcal = IntlCalendar::createInstance('UTC'); $intlcal->clear(); var_dump($intlcal->set(2012, 1, 29)); var_dump($intlcal->getTime(), strtotime('2012-02-29 00:00:00 +0000') * 1000.0); //two minutes to midnight! var_dump($intlcal->set(2012, 1, 29, 23, 58)); var_dump($intlcal->getTime(), strtotime('2012-02-29 23:58:00 +0000') * 1000.0); var_dump($intlcal->set(2012, 1, 29, 23, 58, 31)); var_dump($intlcal->getTime(), strtotime('2012-02-29 23:58:31 +0000') * 1000.0); ?> ==DONE==
<?php ini_set("intl.error_level", E_WARNING); ini_set("intl.default_locale", "nl"); $now = IntlCalendar::getNow(); $proc_now = intlcal_get_now(); $time = time(); var_dump(abs($now - $proc_now) < 2000); var_dump(abs($time * 1000 - $proc_now) < 2000); ?> ==DONE==
<?php ini_set("intl.error_level", E_WARNING); ini_set("intl.default_locale", "nl"); $intlcal1 = new IntlGregorianCalendar(2012, 1, 29, 16, 59, 59); $intlcal2 = IntlCalendar::createInstance(null, '@calendar=japanese'); $intlcal3 = new IntlGregorianCalendar(2012, 1, 29, 17, 00, 00); $intlcal2->setTime($intlcal1->getTime()); var_dump($intlcal2->getType()); var_dump("1 eq 1", $intlcal1->equals($intlcal1)); var_dump("1 eq 2", $intlcal1->equals($intlcal2)); var_dump("1 before 2", $intlcal1->before($intlcal2)); var_dump("1 after 2", $intlcal1->after($intlcal2)); var_dump("1 eq 3", $intlcal1->equals($intlcal3)); var_dump("1 before 3", $intlcal1->before($intlcal3)); var_dump("1 after 3", $intlcal1->after($intlcal3)); var_dump("3 eq 2", intlcal_equals($intlcal3, $intlcal2)); var_dump("3 before 2", intlcal_before($intlcal3, $intlcal2)); var_dump("3 after 2", intlcal_after($intlcal3, $intlcal2)); ?> ==DONE==
<?php ini_set("intl.error_level", E_WARNING); ini_set("intl.default_locale", "nl"); date_default_timezone_set('Europe/Lisbon'); var_dump(IntlCalendar::fromDateTime()); var_dump(IntlCalendar::fromDateTime(0, 1, 2)); try { IntlCalendar::fromDateTime("foobar"); } catch (Exception $e) { echo "threw exception, OK"; } class A extends DateTime { function __construct() { } } var_dump(IntlCalendar::fromDateTime(new A())); $date = new DateTime('2012-01-01 00:00:00 +24:00'); var_dump(IntlCalendar::fromDateTime($date)); $date = new DateTime('2012-01-01 00:00:00 WEST'); var_dump(IntlCalendar::fromDateTime($date)); var_dump(intlcal_from_date_time());
<?php ini_set("intl.error_level", E_WARNING); ini_set("intl.default_locale", "nl"); $locales = IntlCalendar::getAvailableLocales(); var_dump(count($locales) > 100); $locales = intlcal_get_available_locales(); var_dump(in_array('pt', $locales)); ?> ==DONE==
<?php ini_set("intl.error_level", E_WARNING); ini_set("intl.default_locale", "nl_NL"); date_default_timezone_set('Europe/Lisbon'); $cal = IntlCalendar::fromDateTime('2012-01-01 00:00:00 Europe/Rome'); var_dump($cal->getTime(), strtotime('2012-01-01 00:00:00 Europe/Rome') * 1000.0, $cal->getTimeZone()->getID(), $cal->getLocale(1)); echo "\n"; $cal = IntlCalendar::fromDateTime(new DateTime('2012-01-01 00:00:00 PST'), "pt_PT"); var_dump($cal->getTime(), strtotime('2012-01-01 00:00:00 PST') * 1000.0, $cal->getTimeZone()->getID(), $cal->getLocale(1)); echo "\n"; $cal = intlcal_from_date_time(new DateTime('2012-01-01 00:00:00 +03:40')); var_dump($cal->getTime(), strtotime('2012-01-01 00:00:00 +03:40') * 1000.0, $cal->getTimeZone()->getID());
ini_set("intl.default_locale", "pt_PT"); ini_set("date.timezone", "Europe/Lisbon"); var_dump(IntlDateFormatter::formatObject()); var_dump(IntlDateFormatter::formatObject(1)); var_dump(IntlDateFormatter::formatObject(new stdclass())); class A extends IntlCalendar { function __construct() { } } var_dump(IntlDateFormatter::formatObject(new A())); class B extends DateTime { function __construct() { } } var_dump(IntlDateFormatter::formatObject(new B())); $cal = IntlCalendar::createInstance(); var_dump(IntlDateFormatter::formatObject($cal, -2)); var_dump(IntlDateFormatter::formatObject($cal, array())); var_dump(IntlDateFormatter::formatObject($cal, array(1, 2, 3))); var_dump(IntlDateFormatter::formatObject($cal, array(array(), 1))); var_dump(IntlDateFormatter::formatObject($cal, array(1, -2))); var_dump(IntlDateFormatter::formatObject($cal, "")); var_dump(IntlDateFormatter::formatObject($cal, "YYYY", array())); ?> ==DONE==
<?php ini_set("intl.error_level", E_WARNING); var_dump(intlcal_get_keyword_values_for_locale(1, 2)); var_dump(IntlCalendar::getKeywordValuesForLocale(1, 2, array()));
<?php ini_set("intl.error_level", E_WARNING); class X extends IntlTimeZone { function __construct() { } } var_dump(IntlCalendar::createInstance(1, 2, 3)); var_dump(intlcal_create_instance(1, 2, 3)); var_dump(intlcal_create_instance(new X(), NULL)); var_dump(intlcal_create_instance(NULL, array()));
/** * @return array */ public function dataProviderFormatObject() { $date = new \DateTime('2013-06-06 17:05:06 Europe/Dublin'); $calendar = \IntlCalendar::fromDateTime('2013-06-06 17:05:06 Europe/Dublin'); return [[$date, null, null], [$date, \IntlDateFormatter::FULL, null], [$date, null, 'en-US'], [$date, [\IntlDateFormatter::SHORT, \IntlDateFormatter::FULL], 'en-US'], [$date, 'E y-MM-d HH,mm,ss.SSS v', 'en-US'], [$date, [\IntlDateFormatter::NONE, \IntlDateFormatter::FULL], null], [$date, "d 'of' MMMM y", 'en_US'], [new \DateTime('2013-09-09 09:09:09 Europe/Madrid'), \IntlDateFormatter::FULL, 'es_ES'], [new \DateTime('2013-09-09 09:09:09 -01:00'), null, null], [new \DateTime('2013-09-09 09:09:09 +01:00'), null, null], [$calendar, null, null], [$calendar, \IntlDateFormatter::FULL, null], [$calendar, null, 'en-US'], [$calendar, [\IntlDateFormatter::SHORT, \IntlDateFormatter::FULL], 'en-US'], [$calendar, 'E y-MM-d HH,mm,ss.SSS v', 'en-US'], [$calendar, [\IntlDateFormatter::NONE, \IntlDateFormatter::FULL], null], [$calendar, "d 'of' MMMM y", 'en_US'], [\IntlCalendar::fromDateTime('2013-09-09 09:09:09 Europe/Madrid'), \IntlDateFormatter::FULL, 'es_ES'], [\IntlCalendar::fromDateTime('2013-09-09 09:09:09 -01:00'), null, null], [\IntlCalendar::fromDateTime('2013-09-09 09:09:09 +01:00'), null, null]]; }
<?php ini_set("intl.error_level", E_WARNING); var_dump(intlcal_get_available_locales(1)); var_dump(IntlCalendar::getAvailableLocales(2));
<?php ini_set("intl.error_level", E_WARNING); ini_set("intl.default_locale", "nl"); $intlcal = IntlCalendar::createInstance('Europe/Amsterdam'); print_r($intlcal->getTimeZone()->getID()); echo "\n"; var_dump($intlcal->get(IntlCalendar::FIELD_ZONE_OFFSET)); /* passing NULL has no effect */ $intlcal->setTimeZone(null); print_r($intlcal->getTimeZone()->getID()); echo "\n"; var_dump($intlcal->get(IntlCalendar::FIELD_ZONE_OFFSET)); ?> ==DONE==
public function it_should_convert_intl_gregorian_calendar() { if (!class_exists('\\IntlCalendar')) { return; } $this::import(\IntlCalendar::fromDateTime(date_create()))->shouldHaveType('Danhunsaker\\Calends\\Calends'); $this->convert('IntlGregorianCalendar')->shouldHaveKey('duration'); }
<?php ini_set("intl.error_level", E_WARNING); ini_set("intl.default_locale", "nl"); $intlcal = IntlCalendar::createInstance('GMT+00:01'); print_r($intlcal->getTimeZone()); print_r(intlcal_get_time_zone($intlcal)); ?> ==DONE==
<?php ini_set("intl.error_level", E_WARNING); var_dump(intlcal_get_now(1)); var_dump(IntlCalendar::getNow(2));
<?php ini_set("intl.error_level", E_WARNING); ini_set("intl.default_locale", "pt_PT"); ini_set("date.timezone", 'Atlantic/Azores'); $ts = strtotime('2012-01-01 00:00:00 UTC'); $cal = new IntlGregorianCalendar('UTC', NULL); $df = new IntlDateFormatter('es_ES', 0, 0, NULL, $cal); echo $df->format($ts), "\n"; $cal = IntlCalendar::createInstance('UTC', 'en@calendar=islamic'); $df = new IntlDateFormatter('es_ES', 0, 0, NULL, $cal); echo $df->format($ts), "\n"; //override calendar's timezone $cal = new IntlGregorianCalendar('UTC', NULL); $df = new IntlDateFormatter('es_ES', 0, 0, 'Europe/Madrid', $cal); echo $df->format($ts), "\n"; //default calendar is gregorian $df = new IntlDateFormatter('es_ES@calendar=islamic', 0, 0); echo $df->format($ts), "\n"; //try now with traditional $df = new IntlDateFormatter('es_ES@calendar=islamic', 0, 0, NULL, IntlDateFormatter::TRADITIONAL); echo $df->format($ts), "\n"; //the timezone can be overridden when not specifying a calendar $df = new IntlDateFormatter('es_ES@calendar=islamic', 0, 0, 'UTC', IntlDateFormatter::TRADITIONAL); echo $df->format($ts), "\n"; $df = new IntlDateFormatter('es_ES', 0, 0, 'UTC', 0); echo $df->format($ts), "\n"; ?> ==DONE==
<?php ini_set("intl.error_level", E_WARNING); ini_set("intl.default_locale", "pt_PT"); ini_set("date.timezone", 'Atlantic/Azores'); $ts = strtotime('2012-01-01 00:00:00 UTC'); function d(IntlDateFormatter $df) { global $ts; echo $df->format($ts), "\n"; var_dump($df->getCalendar(), $df->getCalendarObject()->getType(), $df->getCalendarObject()->getTimeZone()->getId()); echo "\n"; } $df = new IntlDateFormatter('fr@calendar=islamic', 0, 0, 'Europe/Minsk'); d($df); //changing the calendar with a cal type should not change tz $df->setCalendar(IntlDateFormatter::TRADITIONAL); d($df); //but changing with an actual calendar should $cal = IntlCalendar::createInstance("UTC"); $df->setCalendar($cal); d($df); ?> ==DONE==
<button class="btn btn-primary" data-toggle="dropdown" type="button"><?php echo __('New translation'); ?> </button> <div class="dropdown-menu dropdown-menu-right"> <form class="col-sm-12" role="form" method="post" action="<?php echo Request::current()->url(); ?> "> <div class="form-group"> <label class="sr-only" for="locale"><?php echo __('New translation'); ?> </label> <select class="form-control" id="locale" name="locale"> <?foreach (IntlCalendar::getAvailableLocales() as $locale):?> <option value="<?php echo $locale; ?> "><?php echo $locale; ?> </option> <?endforeach?> </select> <p class="help-block"><?php echo __('If your locale is not listed, be sure your hosting has your locale installed.'); ?> </p> </div> <button type="submit" class="btn btn-primary"><?php
<?php ini_set("intl.error_level", E_WARNING); ini_set("intl.default_locale", "pt_PT"); ini_set("date.timezone", "Europe/Lisbon"); $cal = IntlCalendar::fromDateTime('2012-01-01 00:00:00'); //Europe/Lisbon echo IntlDateFormatter::formatObject($cal), "\n"; echo IntlDateFormatter::formatObject($cal, IntlDateFormatter::FULL), "\n"; echo IntlDateFormatter::formatObject($cal, null, "en-US"), "\n"; echo IntlDateFormatter::formatObject($cal, array(IntlDateFormatter::SHORT, IntlDateFormatter::FULL), "en-US"), "\n"; echo IntlDateFormatter::formatObject($cal, 'E y-MM-d HH,mm,ss.SSS v', "en-US"), "\n"; $cal = IntlCalendar::fromDateTime('2012-01-01 05:00:00+03:00'); echo datefmt_format_object($cal, IntlDateFormatter::FULL), "\n"; $cal = IntlCalendar::createInstance(null, 'en-US@calendar=islamic-civil'); $cal->setTime(strtotime('2012-01-01 00:00:00') * 1000.0); echo IntlDateFormatter::formatObject($cal), "\n"; echo IntlDateFormatter::formatObject($cal, IntlDateFormatter::FULL, "en-US"), "\n"; ?> ==DONE==
<?php ini_set("intl.error_level", E_WARNING); ini_set("intl.default_locale", "nl"); print_r(iterator_to_array(IntlCalendar::getKeywordValuesForLocale('calendar', 'pt', true))); echo "\n"; $var = iterator_to_array(intlcal_get_keyword_values_for_locale('calendar', 'pt', false)); var_dump(count($var) > 8); var_dump(in_array('japanese', $var)); ?> ==DONE==