Improve datetime display

Use php-intl extension to display datetimes a bit more nicely, depending on the locale.

What changes:

  * the day is no longer displayed
  * day number and month are ordered according to the locale
  * the timezone is more readable (UTC+1 instead of CET)
This commit is contained in:
ArthurHoaro 2017-01-07 14:30:42 +01:00
parent 1255a42cfe
commit 52b503105d
8 changed files with 175 additions and 36 deletions

View file

@ -23,7 +23,12 @@ class UtilsTest extends PHPUnit_Framework_TestCase
// Expected log date format
protected static $dateFormat = 'Y/m/d H:i:s';
/**
* @var string Save the current timezone.
*/
protected static $defaultTimeZone;
/**
* Assign reference data
@ -31,6 +36,17 @@ class UtilsTest extends PHPUnit_Framework_TestCase
public static function setUpBeforeClass()
{
self::$sidHashes = ReferenceSessionIdHashes::getHashes();
self::$defaultTimeZone = date_default_timezone_get();
// Timezone without DST for test consistency
date_default_timezone_set('Africa/Nairobi');
}
/**
* Reset the timezone
*/
public static function tearDownAfterClass()
{
date_default_timezone_set(self::$defaultTimeZone);
}
/**
@ -286,20 +302,28 @@ class UtilsTest extends PHPUnit_Framework_TestCase
/**
* Test arrays_combine
*/
public function testArraysCombination()
public function testCartesianProductGenerator()
{
$arr = [['ab', 'cd'], ['ef', 'gh'], ['ij', 'kl'], ['m']];
$expected = [
'abefijm',
'cdefijm',
'abghijm',
'cdghijm',
'abefklm',
'cdefklm',
'abghklm',
'cdghklm',
['ab', 'ef', 'ij', 'm'],
['ab', 'ef', 'kl', 'm'],
['ab', 'gh', 'ij', 'm'],
['ab', 'gh', 'kl', 'm'],
['cd', 'ef', 'ij', 'm'],
['cd', 'ef', 'kl', 'm'],
['cd', 'gh', 'ij', 'm'],
['cd', 'gh', 'kl', 'm'],
];
$this->assertEquals($expected, arrays_combination($arr));
$this->assertEquals($expected, iterator_to_array(cartesian_product_generator($arr)));
}
/**
* Test date_format() with invalid parameter.
*/
public function testDateFormatInvalid()
{
$this->assertFalse(format_date([]));
$this->assertFalse(format_date(null));
}
}

View file

@ -0,0 +1,7 @@
<?php
if (! empty('UT_LOCALE')) {
setlocale(LC_ALL, getenv('UT_LOCALE'));
}
require_once 'vendor/autoload.php';

View file

@ -0,0 +1,25 @@
<?php
require_once 'tests/UtilsTest.php';
class UtilsDeTest extends UtilsTest
{
/**
* Test date_format().
*/
public function testDateFormat()
{
$date = DateTime::createFromFormat('Ymd_His', '20170101_101112');
$this->assertRegExp('/1. Januar 2017 (um )?10:11:12 GMT\+0?3(:00)?/', format_date($date, true));
}
/**
* Test date_format() using builtin PHP function strftime.
*/
public function testDateFormatDefault()
{
$date = DateTime::createFromFormat('Ymd_His', '20170101_101112');
$this->assertEquals('So 01 Jan 2017 10:11:12 EAT', format_date($date, false));
}
}

View file

@ -0,0 +1,25 @@
<?php
require_once 'tests/UtilsTest.php';
class UtilsEnTest extends UtilsTest
{
/**
* Test date_format().
*/
public function testDateFormat()
{
$date = DateTime::createFromFormat('Ymd_His', '20170101_101112');
$this->assertRegExp('/January 1, 2017 (at )?10:11:12 AM GMT\+0?3(:00)?/', format_date($date, true));
}
/**
* Test date_format() using builtin PHP function strftime.
*/
public function testDateFormatDefault()
{
$date = DateTime::createFromFormat('Ymd_His', '20170101_101112');
$this->assertEquals('Sun 01 Jan 2017 10:11:12 AM EAT', format_date($date, false));
}
}

View file

@ -0,0 +1,25 @@
<?php
require_once 'tests/UtilsTest.php';
class UtilsFrTest extends UtilsTest
{
/**
* Test date_format().
*/
public function testDateFormat()
{
$date = DateTime::createFromFormat('Ymd_His', '20170101_101112');
$this->assertRegExp('/1 janvier 2017 (à )?10:11:12 UTC\+0?3(:00)?/', format_date($date));
}
/**
* Test date_format() using builtin PHP function strftime.
*/
public function testDateFormatDefault()
{
$date = DateTime::createFromFormat('Ymd_His', '20170101_101112');
$this->assertEquals('dim. 01 janv. 2017 10:11:12 EAT', format_date($date, false));
}
}