/**
  * 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);
 }
Esempio n. 2
0
 /**
  * @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;
 }
Esempio n. 4
0
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;
}
Esempio n. 5
0
 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]));
 }
Esempio n. 6
0
<?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==
Esempio n. 7
0
<?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==
Esempio n. 8
0
<?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==
Esempio n. 19
0
 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');
 }
Esempio n. 20
0
<?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==
Esempio n. 21
0
<?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==
Esempio n. 24
0
            <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==