Fix docs of date filter
authorJordi Boggiano <j.boggiano@seld.be>
Wed, 20 Jun 2012 17:45:27 +0000 (19:45 +0200)
committerJordi Boggiano <j.boggiano@seld.be>
Wed, 20 Jun 2012 17:45:27 +0000 (19:45 +0200)
doc/filters/date.rst
lib/Twig/Extension/Core.php
test/Twig/Tests/Fixtures/filters/date_modify.test [new file with mode: 0644]

index 9833f03..e6dc613 100644 (file)
@@ -17,7 +17,7 @@ The ``date`` filter formats a date to a given format:
     {{ post.published_at|date("m/d/Y") }}
 
 The ``date`` filter accepts strings (it must be in a format supported by the
-`date`_ function), `DateTime`_ instances, or `DateInterval`_ instances. For
+`strtotime`_ function), `DateTime`_ instances, or `DateInterval`_ instances. For
 instance, to display the current date, filter the word "now":
 
 .. code-block:: jinja
@@ -53,7 +53,7 @@ The default timezone can also be set globally by calling ``setTimezone()``:
     $twig = new Twig_Environment($loader);
     $twig->getExtension('core')->setTimezone('Europe/Paris');
 
-.. _`date`:         http://www.php.net/date
+.. _`strtotime`:    http://www.php.net/strtotime
 .. _`DateTime`:     http://www.php.net/DateTime
 .. _`DateInterval`: http://www.php.net/DateInterval
 
index 27c80ce..9a2926a 100644 (file)
@@ -123,6 +123,7 @@ class Twig_Extension_Core extends Twig_Extension
         $filters = array(
             // formatting filters
             'date'          => new Twig_Filter_Function('twig_date_format_filter', array('needs_environment' => true)),
+            'date_modify'   => new Twig_Filter_Function('twig_date_modify_filter', array('needs_environment' => true)),
             'format'        => new Twig_Filter_Function('sprintf'),
             'replace'       => new Twig_Filter_Function('strtr'),
             'number_format' => new Twig_Filter_Function('twig_number_format_filter', array('needs_environment' => true)),
@@ -378,7 +379,7 @@ function twig_random(Twig_Environment $env, $values = null)
  * @param string                       $format   A format
  * @param DateTimeZone|string          $timezone A timezone
  *
- * @return string The formatter date
+ * @return string The formatted date
  */
 function twig_date_format_filter(Twig_Environment $env, $date, $format = null, $timezone = null)
 {
@@ -400,6 +401,30 @@ function twig_date_format_filter(Twig_Environment $env, $date, $format = null, $
 }
 
 /**
+ * Returns a new date object modified
+ *
+ * <pre>
+ *   {{ post.published_at|modify("-1day")|date("m/d/Y") }}
+ * </pre>
+ *
+ * @param Twig_Environment  $env      A Twig_Environment instance
+ * @param DateTime|string   $date     A date
+ * @param string            $modifier A modifier string
+ *
+ * @return DateTime A new date object
+ */
+function twig_date_modify_filter(Twig_Environment $env, $date, $modifier)
+{
+    if ($date instanceof DateTime) {
+        $date = clone $date;
+    } else {
+        $date = twig_date_converter($env, $date);
+    }
+
+    return $date->modify($modifier);
+}
+
+/**
  * Converts an input to a DateTime instance.
  *
  * <pre>
diff --git a/test/Twig/Tests/Fixtures/filters/date_modify.test b/test/Twig/Tests/Fixtures/filters/date_modify.test
new file mode 100644 (file)
index 0000000..53d3a69
--- /dev/null
@@ -0,0 +1,14 @@
+--TEST--
+"date_modify" filter
+--TEMPLATE--
+{{ date1|date_modify('-1day')|date('Y-m-d H:i:s') }}
+{{ date2|date_modify('-1day')|date('Y-m-d H:i:s') }}
+--DATA--
+date_default_timezone_set('UTC');
+return array(
+    'date1' => '2010-10-04 13:45',
+    'date2' => new DateTime('2010-10-04 13:45'),
+)
+--EXPECT--
+2010-10-03 13:45:00
+2010-10-03 13:45:00