Преглед изворни кода

[Locale] support for G and Q placeholders in StubIntlDateFormatter::format

Igor Wiedler пре 14 година
родитељ
комит
b702ce86b5

+ 25 - 1
src/Symfony/Component/Locale/Stub/StubIntlDateFormatter.php

@@ -40,7 +40,7 @@ class StubIntlDateFormatter
 
     public function format($timestamp)
     {
-        $regExp = "/('(M+|y+|d+|[^Myd])|M+|y+|d+)/";
+        $regExp = "/('(M+|y+|d+|G+|Q+|q+|[^MydGQq])|M+|y+|d+|G+|Q+|q+)/";
 
         $callback = function($matches) use ($timestamp) {
             $pattern = $matches[0];
@@ -86,6 +86,30 @@ class StubIntlDateFormatter
                 case 'd':
                     return str_pad(gmdate('j', $timestamp), $length, '0', STR_PAD_LEFT);
                     break;
+
+                case 'G':
+                    $year = (int) gmdate('Y', $timestamp);
+                    return $year >= 0 ? 'AD' : 'BC';
+                    break;
+
+                case 'q':
+                case 'Q':
+                    $month = (int) gmdate('n', $timestamp);
+                    $quarter = (int) floor(($month - 1) / 3) + 1;
+                    switch ($length) {
+                        case 1:
+                        case 2:
+                            return str_pad($quarter, $length, '0', STR_PAD_LEFT);
+                            break;
+                        case 3:
+                            return 'Q' . $quarter;
+                            break;
+                        default:
+                            $map = array(1 => '1st quarter', 2 => '2nd quarter', 3 => '3rd quarter', 4 => '4th quarter');
+                            return $map[$quarter];
+                            break;
+                    }
+                    break;
             }  
         };
 

+ 26 - 1
tests/Symfony/Tests/Component/Locale/Stub/StubIntlDateFormatterTest.php

@@ -34,7 +34,6 @@ class StubIntlDateFormatterTest extends \PHPUnit_Framework_TestCase
             array('MMM', 0, 'Jan'),
             array('MMMM', 0, 'January'),
             array('MMMMM', 0, 'J'),
-            /* this is stupid */
             array('MMMMMM', 0, '00001'),
 
             /* years */
@@ -49,6 +48,32 @@ class StubIntlDateFormatterTest extends \PHPUnit_Framework_TestCase
             array('d', 0, '1'),
             array('dd', 0, '01'),
             array('ddd', 0, '001'),
+
+            /* era */
+            array('G', 0, 'AD'),
+            array('G', -62167222800, 'BC'),
+
+            /* quarter */
+            array('Q', 0, '1'),
+            array('QQ', 0, '01'),
+            array('QQQ', 0, 'Q1'),
+            array('QQQQ', 0, '1st quarter'),
+            array('QQQQQ', 0, '1st quarter'),
+
+            array('q', 0, '1'),
+            array('qq', 0, '01'),
+            array('qqq', 0, 'Q1'),
+            array('qqqq', 0, '1st quarter'),
+            array('qqqqq', 0, '1st quarter'),
+
+            array('Q', 7776000, '2'),
+            array('QQ', 7776000, '02'),
+            array('QQQ', 7776000, 'Q2'),
+            array('QQQQ', 7776000, '2nd quarter'),
+
+            array('QQQQ', 15638400, '3rd quarter'),
+
+            array('QQQQ', 23587200, '4th quarter'),
         );
     }