diff --git a/reference/constraints/GreaterThan.rst b/reference/constraints/GreaterThan.rst
index b1066c6b1f4..bf47027494d 100644
--- a/reference/constraints/GreaterThan.rst
+++ b/reference/constraints/GreaterThan.rst
@@ -4,8 +4,8 @@ GreaterThan
.. versionadded:: 2.3
The ``GreaterThan`` constraint was introduced in Symfony 2.3.
-Validates that a value is greater than another value, defined in the options.
-To force that a value is greater than or equal to another value, see
+Validates that a value is greater than another value, defined in the options. To
+force that a value is greater than or equal to another value, see
:doc:`/reference/constraints/GreaterThanOrEqual`. To force a value is less
than another value, see :doc:`/reference/constraints/LessThan`.
@@ -24,8 +24,8 @@ than another value, see :doc:`/reference/constraints/LessThan`.
Basic Usage
-----------
-If you want to ensure that the ``age`` of a ``Person`` class is greater
-than ``18``, you could do the following:
+If you want to ensure that the ``age`` of a ``Person`` class is greater than
+``18``, you could do the following:
.. configuration-block::
@@ -90,6 +90,191 @@ than ``18``, you could do the following:
}
}
+Comparing Dates
+---------------
+
+.. versionadded:: 2.6
+ The feature to compare dates was introduced in Symfony 2.6.
+
+This constraint can be used to compare ``DateTime`` objects against any date
+string `accepted by the DateTime constructor`_. For example, you could check
+that a date must at least be the next day:
+
+.. configuration-block::
+
+ .. code-block:: php-annotations
+
+ // src/Acme/OrderBundle/Entity/Order.php
+ namespace Acme\OrderBundle\Entity;
+
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Order
+ {
+ /**
+ * @Assert\GreaterThan("today")
+ */
+ protected $deliveryDate;
+ }
+
+ .. code-block:: yaml
+
+ # src/Acme/OrderBundle/Resources/config/validation.yml
+ Acme\OrderBundle\Entity\Order:
+ properties:
+ deliveryDate:
+ - GreaterThan: today
+
+ .. code-block:: xml
+
+
+
+
+
+
+
+ today
+
+
+
+
+ .. code-block:: php
+
+ // src/Acme/OrderBundle/Entity/Order.php
+ namespace Acme\OrderBundle\Entity;
+
+ use Symfony\Component\Validator\Mapping\ClassMetadata;
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Order
+ {
+ public static function loadValidatorMetadata(ClassMetadata $metadata)
+ {
+ $metadata->addPropertyConstraint('deliveryDate', new Assert\GreaterThan('today'));
+ }
+ }
+
+Be aware that PHP will use the server's configured timezone to interpret these
+dates. If you want to fix the timezone, append it to the date string:
+
+.. configuration-block::
+
+ .. code-block:: php-annotations
+
+ // src/Acme/OrderBundle/Entity/Order.php
+ namespace Acme\OrderBundle\Entity;
+
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Order
+ {
+ /**
+ * @Assert\GreaterThan("today UTC")
+ */
+ protected $deliveryDate;
+ }
+
+ .. code-block:: yaml
+
+ # src/Acme/OrderBundle/Resources/config/validation.yml
+ Acme\OrderBundle\Entity\Order:
+ properties:
+ deliveryDate:
+ - GreaterThan: today UTC
+
+ .. code-block:: xml
+
+
+
+
+
+
+
+ today UTC
+
+
+
+
+ .. code-block:: php
+
+ // src/Acme/OrderBundle/Entity/Order.php
+ namespace Acme\OrderBundle\Entity;
+
+ use Symfony\Component\Validator\Mapping\ClassMetadata;
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Order
+ {
+ public static function loadValidatorMetadata(ClassMetadata $metadata)
+ {
+ $metadata->addPropertyConstraint('deliveryDate', new Assert\GreaterThan('today UTC'));
+ }
+ }
+
+The ``DateTime`` class also accepts relative dates or times. For example, you
+can check that the above delivery date starts at least five hours after the
+current time:
+
+.. configuration-block::
+
+ .. code-block:: php-annotations
+
+ // src/Acme/OrderBundle/Entity/Order.php
+ namespace Acme\OrderBundle\Entity;
+
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Order
+ {
+ /**
+ * @Assert\GreaterThan("+5 hours")
+ */
+ protected $deliveryDate;
+ }
+
+ .. code-block:: yaml
+
+ # src/Acme/OrderBundle/Resources/config/validation.yml
+ Acme\OrderBundle\Entity\Order:
+ properties:
+ deliveryDate:
+ - GreaterThan: +5 hours
+
+ .. code-block:: xml
+
+
+
+
+
+
+
+ +5 hours
+
+
+
+
+ .. code-block:: php
+
+ // src/Acme/OrderBundle/Entity/Order.php
+ namespace Acme\OrderBundle\Entity;
+
+ use Symfony\Component\Validator\Mapping\ClassMetadata;
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Order
+ {
+ public static function loadValidatorMetadata(ClassMetadata $metadata)
+ {
+ $metadata->addPropertyConstraint('deliveryDate', new Assert\GreaterThan('+5 hours'));
+ }
+ }
+
Options
-------
@@ -100,7 +285,9 @@ message
**type**: ``string`` **default**: ``This value should be greater than {{ compared_value }}.``
-This is the message that will be shown if the value is not greater than
-the comparison value.
+This is the message that will be shown if the value is not greater than the
+comparison value.
.. include:: /reference/constraints/_payload-option.rst.inc
+
+.. _`accepted by the DateTime constructor`: http://www.php.net/manual/en/datetime.formats.php
diff --git a/reference/constraints/GreaterThanOrEqual.rst b/reference/constraints/GreaterThanOrEqual.rst
index cc868390490..4d61dd5b077 100644
--- a/reference/constraints/GreaterThanOrEqual.rst
+++ b/reference/constraints/GreaterThanOrEqual.rst
@@ -4,8 +4,8 @@ GreaterThanOrEqual
.. versionadded:: 2.3
The ``GreaterThanOrEqual`` constraint was introduced in Symfony 2.3.
-Validates that a value is greater than or equal to another value, defined
-in the options. To force that a value is greater than another value, see
+Validates that a value is greater than or equal to another value, defined in
+the options. To force that a value is greater than another value, see
:doc:`/reference/constraints/GreaterThan`.
+----------------+----------------------------------------------------------------------------------+
@@ -23,8 +23,8 @@ in the options. To force that a value is greater than another value, see
Basic Usage
-----------
-If you want to ensure that the ``age`` of a ``Person`` class is greater
-than or equal to ``18``, you could do the following:
+If you want to ensure that the ``age`` of a ``Person`` class is greater than
+or equal to ``18``, you could do the following:
.. configuration-block::
@@ -89,6 +89,191 @@ than or equal to ``18``, you could do the following:
}
}
+Comparing Dates
+---------------
+
+.. versionadded:: 2.6
+ The feature to compare dates was introduced in Symfony 2.6.
+
+This constraint can be used to compare ``DateTime`` objects against any date
+string `accepted by the DateTime constructor`_. For example, you could check
+that a date must at least be the current day:
+
+.. configuration-block::
+
+ .. code-block:: php-annotations
+
+ // src/Acme/SocialBundle/Entity/Order.php
+ namespace Acme\OrderBundle\Entity;
+
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Order
+ {
+ /**
+ * @Assert\GreaterThanOrEqual("today")
+ */
+ protected $deliveryDate;
+ }
+
+ .. code-block:: yaml
+
+ # src/OrderBundle/Resources/config/validation.yml
+ Acme\OrderBundle\Entity\Order:
+ properties:
+ deliveryDate:
+ - GreaterThanOrEqual: today
+
+ .. code-block:: xml
+
+
+
+
+
+
+
+ today
+
+
+
+
+ .. code-block:: php
+
+ // src/Acme/OrderBundle/Entity/Order.php
+ namespace Acme\OrderBundle\Entity;
+
+ use Symfony\Component\Validator\Mapping\ClassMetadata;
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Order
+ {
+ public static function loadValidatorMetadata(ClassMetadata $metadata)
+ {
+ $metadata->addPropertyConstraint('deliveryDate', new Assert\GreaterThanOrEqual('today'));
+ }
+ }
+
+Be aware that PHP will use the server's configured timezone to interpret these
+dates. If you want to fix the timezone, append it to the date string:
+
+.. configuration-block::
+
+ .. code-block:: php-annotations
+
+ // src/Acme/SocialBundle/Entity/Order.php
+ namespace Acme\OrderBundle\Entity;
+
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Order
+ {
+ /**
+ * @Assert\GreaterThanOrEqual("today UTC")
+ */
+ protected $deliveryDate;
+ }
+
+ .. code-block:: yaml
+
+ # src/OrderBundle/Resources/config/validation.yml
+ Acme\OrderBundle\Entity\Order:
+ properties:
+ deliveryDate:
+ - GreaterThanOrEqual: today UTC
+
+ .. code-block:: xml
+
+
+
+
+
+
+
+ today UTC
+
+
+
+
+ .. code-block:: php
+
+ // src/Acme/OrderBundle/Entity/Order.php
+ namespace Acme\OrderBundle\Entity;
+
+ use Symfony\Component\Validator\Mapping\ClassMetadata;
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Order
+ {
+ public static function loadValidatorMetadata(ClassMetadata $metadata)
+ {
+ $metadata->addPropertyConstraint('deliveryDate', new Assert\GreaterThanOrEqual('today UTC'));
+ }
+ }
+
+The ``DateTime`` class also accepts relative dates or times. For example, you
+can check that the above delivery date starts at least five hours after the
+current time:
+
+.. configuration-block::
+
+ .. code-block:: php-annotations
+
+ // src/Acme/SocialBundle/Entity/Order.php
+ namespace Acme\OrderBundle\Entity;
+
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Order
+ {
+ /**
+ * @Assert\GreaterThanOrEqual("+5 hours")
+ */
+ protected $deliveryDate;
+ }
+
+ .. code-block:: yaml
+
+ # src/OrderBundle/Resources/config/validation.yml
+ Acme\OrderBundle\Entity\Order:
+ properties:
+ deliveryDate:
+ - GreaterThanOrEqual: +5 hours
+
+ .. code-block:: xml
+
+
+
+
+
+
+
+ +5 hours
+
+
+
+
+ .. code-block:: php
+
+ // src/Acme/OrderBundle/Entity/Order.php
+ namespace Acme\OrderBundle\Entity;
+
+ use Symfony\Component\Validator\Mapping\ClassMetadata;
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Order
+ {
+ public static function loadValidatorMetadata(ClassMetadata $metadata)
+ {
+ $metadata->addPropertyConstraint('deliveryDate', new Assert\GreaterThanOrEqual('+5 hours'));
+ }
+ }
+
Options
-------
@@ -99,7 +284,9 @@ message
**type**: ``string`` **default**: ``This value should be greater than or equal to {{ compared_value }}.``
-This is the message that will be shown if the value is not greater than
-or equal to the comparison value.
+This is the message that will be shown if the value is not greater than or equal
+to the comparison value.
.. include:: /reference/constraints/_payload-option.rst.inc
+
+.. _`accepted by the DateTime constructor`: http://www.php.net/manual/en/datetime.formats.php
diff --git a/reference/constraints/LessThan.rst b/reference/constraints/LessThan.rst
index d14e289fd0c..772f6e629ee 100644
--- a/reference/constraints/LessThan.rst
+++ b/reference/constraints/LessThan.rst
@@ -4,8 +4,8 @@ LessThan
.. versionadded:: 2.3
The ``LessThan`` constraint was introduced in Symfony 2.3.
-Validates that a value is less than another value, defined in the options.
-To force that a value is less than or equal to another value, see
+Validates that a value is less than another value, defined in the options. To
+force that a value is less than or equal to another value, see
:doc:`/reference/constraints/LessThanOrEqual`. To force a value is greater
than another value, see :doc:`/reference/constraints/GreaterThan`.
@@ -90,6 +90,190 @@ If you want to ensure that the ``age`` of a ``Person`` class is less than
}
}
+Comparing Dates
+---------------
+
+.. versionadded:: 2.6
+ The feature to compare dates was introduced in Symfony 2.6.
+
+This constraint can be used to compare ``DateTime`` objects against any date
+string `accepted by the DateTime constructor`_. For example, you could check
+that a date must be in the past like this:
+
+.. configuration-block::
+
+ .. code-block:: php-annotations
+
+ // src/Acme/SocialBundle/Entity/Person.php
+ namespace Acme\SocialBundle\Entity;
+
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Person
+ {
+ /**
+ * @Assert\LessThan("today")
+ */
+ protected $dateOfBirth;
+ }
+
+ .. code-block:: yaml
+
+ # src/SocialBundle/Resources/config/validation.yml
+ Acme\SocialBundle\Entity\Person:
+ properties:
+ dateOfBirth:
+ - LessThan: today
+
+ .. code-block:: xml
+
+
+
+
+
+
+
+ today
+
+
+
+
+ .. code-block:: php
+
+ // src/Acme/SocialBundle/Entity/Person.php
+ namespace Acme\SocialBundle\Entity;
+
+ use Symfony\Component\Validator\Mapping\ClassMetadata;
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Person
+ {
+ public static function loadValidatorMetadata(ClassMetadata $metadata)
+ {
+ $metadata->addPropertyConstraint('dateOfBirth', new Assert\LessThan('today'));
+ }
+ }
+
+Be aware that PHP will use the server's configured timezone to interpret these
+dates. If you want to fix the timezone, append it to the date string:
+
+.. configuration-block::
+
+ .. code-block:: php-annotations
+
+ // src/Acme/SocialBundle/Entity/Person.php
+ namespace Acme\SocialBundle\Entity;
+
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Person
+ {
+ /**
+ * @Assert\LessThan("today UTC")
+ */
+ protected $dateOfBirth;
+ }
+
+ .. code-block:: yaml
+
+ # src/SocialBundle/Resources/config/validation.yml
+ Acme\SocialBundle\Entity\Person:
+ properties:
+ dateOfBirth:
+ - LessThan: today UTC
+
+ .. code-block:: xml
+
+
+
+
+
+
+
+ today UTC
+
+
+
+
+ .. code-block:: php
+
+ // src/Acme/SocialBundle/Entity/Person.php
+ namespace Acme\SocialBundle\Entity;
+
+ use Symfony\Component\Validator\Mapping\ClassMetadata;
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Person
+ {
+ public static function loadValidatorMetadata(ClassMetadata $metadata)
+ {
+ $metadata->addPropertyConstraint('age', new Assert\LessThan('today UTC'));
+ }
+ }
+
+The ``DateTime`` class also accepts relative dates or times. For example, you
+can check that a person must be at least 18 years old like this:
+
+.. configuration-block::
+
+ .. code-block:: php-annotations
+
+ // src/Acme/SocialBundle/Entity/Person.php
+ namespace Acme\SocialBundle\Entity;
+
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Person
+ {
+ /**
+ * @Assert\LessThan("-18 years")
+ */
+ protected $dateOfBirth;
+ }
+
+ .. code-block:: yaml
+
+ # src/SocialBundle/Resources/config/validation.yml
+ Acme\SocialBundle\Entity\Person:
+ properties:
+ dateOfBirth:
+ - LessThan: -18 years
+
+ .. code-block:: xml
+
+
+
+
+
+
+
+ -18 years
+
+
+
+
+ .. code-block:: php
+
+ // src/Acme/SocialBundle/Entity/Person.php
+ namespace Acme\SocialBundle\Entity;
+
+ use Symfony\Component\Validator\Mapping\ClassMetadata;
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Person
+ {
+ public static function loadValidatorMetadata(ClassMetadata $metadata)
+ {
+ $metadata->addPropertyConstraint('dateOfBirth', new Assert\LessThan('-18 years'));
+ }
+ }
+
Options
-------
@@ -104,3 +288,5 @@ This is the message that will be shown if the value is not less than the
comparison value.
.. include:: /reference/constraints/_payload-option.rst.inc
+
+.. _`accepted by the DateTime constructor`: http://www.php.net/manual/en/datetime.formats.php
diff --git a/reference/constraints/LessThanOrEqual.rst b/reference/constraints/LessThanOrEqual.rst
index c75266bbc52..22d0201a429 100644
--- a/reference/constraints/LessThanOrEqual.rst
+++ b/reference/constraints/LessThanOrEqual.rst
@@ -4,8 +4,8 @@ LessThanOrEqual
.. versionadded:: 2.3
The ``LessThanOrEqual`` constraint was introduced in Symfony 2.3.
-Validates that a value is less than or equal to another value, defined in
-the options. To force that a value is less than another value, see
+Validates that a value is less than or equal to another value, defined in the
+options. To force that a value is less than another value, see
:doc:`/reference/constraints/LessThan`.
+----------------+-------------------------------------------------------------------------------+
@@ -23,8 +23,8 @@ the options. To force that a value is less than another value, see
Basic Usage
-----------
-If you want to ensure that the ``age`` of a ``Person`` class is less than
-or equal to ``80``, you could do the following:
+If you want to ensure that the ``age`` of a ``Person`` class is less than or
+equal to ``80``, you could do the following:
.. configuration-block::
@@ -89,6 +89,190 @@ or equal to ``80``, you could do the following:
}
}
+Comparing Dates
+---------------
+
+.. versionadded:: 2.6
+ The feature to compare dates was introduced in Symfony 2.6.
+
+This constraint can be used to compare ``DateTime`` objects against any date
+string `accepted by the DateTime constructor`_. For example, you could check
+that a date must be today or in the past like this:
+
+.. configuration-block::
+
+ .. code-block:: php-annotations
+
+ // src/Acme/SocialBundle/Entity/Person.php
+ namespace Acme\SocialBundle\Entity;
+
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Person
+ {
+ /**
+ * @Assert\LessThanOrEqual("today")
+ */
+ protected $age;
+ }
+
+ .. code-block:: yaml
+
+ # src/SocialBundle/Resources/config/validation.yml
+ Acme\SocialBundle\Entity\Person:
+ properties:
+ age:
+ - LessThanOrEqual: today
+
+ .. code-block:: xml
+
+
+
+
+
+
+
+ today
+
+
+
+
+ .. code-block:: php
+
+ // src/Acme/SocialBundle/Entity/Person.php
+ namespace Acme\SocialBundle\Entity;
+
+ use Symfony\Component\Validator\Mapping\ClassMetadata;
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Person
+ {
+ public static function loadValidatorMetadata(ClassMetadata $metadata)
+ {
+ $metadata->addPropertyConstraint('age', new Assert\LessThanOrEqual('today'));
+ }
+ }
+
+Be aware that PHP will use the server's configured timezone to interpret these
+dates. If you want to fix the timezone, append it to the date string:
+
+.. configuration-block::
+
+ .. code-block:: php-annotations
+
+ // src/Acme/SocialBundle/Entity/Person.php
+ namespace Acme\SocialBundle\Entity;
+
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Person
+ {
+ /**
+ * @Assert\LessThanOrEqual("today UTC")
+ */
+ protected $age;
+ }
+
+ .. code-block:: yaml
+
+ # src/SocialBundle/Resources/config/validation.yml
+ Acme\SocialBundle\Entity\Person:
+ properties:
+ age:
+ - LessThanOrEqual: today UTC
+
+ .. code-block:: xml
+
+
+
+
+
+
+
+ today UTC
+
+
+
+
+ .. code-block:: php
+
+ // src/Acme/SocialBundle/Entity/Person.php
+ namespace Acme\SocialBundle\Entity;
+
+ use Symfony\Component\Validator\Mapping\ClassMetadata;
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Person
+ {
+ public static function loadValidatorMetadata(ClassMetadata $metadata)
+ {
+ $metadata->addPropertyConstraint('age', new Assert\LessThanOrEqual('today UTC'));
+ }
+ }
+
+The ``DateTime`` class also accepts relative dates or times. For example, you
+can check that a person must be at least 18 years old like this:
+
+.. configuration-block::
+
+ .. code-block:: php-annotations
+
+ // src/Acme/SocialBundle/Entity/Person.php
+ namespace Acme\SocialBundle\Entity;
+
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Person
+ {
+ /**
+ * @Assert\LessThanOrEqual("-18 years")
+ */
+ protected $age;
+ }
+
+ .. code-block:: yaml
+
+ # src/SocialBundle/Resources/config/validation.yml
+ Acme\SocialBundle\Entity\Person:
+ properties:
+ age:
+ - LessThanOrEqual: -18 years
+
+ .. code-block:: xml
+
+
+
+
+
+
+
+ -18 years
+
+
+
+
+ .. code-block:: php
+
+ // src/Acme/SocialBundle/Entity/Person.php
+ namespace Acme\SocialBundle\Entity;
+
+ use Symfony\Component\Validator\Mapping\ClassMetadata;
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Person
+ {
+ public static function loadValidatorMetadata(ClassMetadata $metadata)
+ {
+ $metadata->addPropertyConstraint('age', new Assert\LessThanOrEqual('-18 years'));
+ }
+ }
+
Options
-------
@@ -99,7 +283,9 @@ message
**type**: ``string`` **default**: ``This value should be less than or equal to {{ compared_value }}.``
-This is the message that will be shown if the value is not less than or
-equal to the comparison value.
+This is the message that will be shown if the value is not less than or equal
+to the comparison value.
.. include:: /reference/constraints/_payload-option.rst.inc
+
+.. _`accepted by the DateTime constructor`: http://www.php.net/manual/en/datetime.formats.php
diff --git a/reference/constraints/Range.rst b/reference/constraints/Range.rst
index b588cc31cca..6f4dea3339d 100644
--- a/reference/constraints/Range.rst
+++ b/reference/constraints/Range.rst
@@ -99,6 +99,221 @@ you might add the following:
}
}
+Date Ranges
+-----------
+
+This constraint can be used to compare ``DateTime`` objects against date ranges.
+The minimum and maximum date of the range should be given as any date string
+`accepted by the DateTime constructor`_. For example, you could check that a
+date must lie within the current year like this:
+
+.. configuration-block::
+
+ .. code-block:: php-annotations
+
+ // src/Acme/SocialBundle/Entity/Event.php
+ namespace Acme\EventBundle\Entity;
+
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Event
+ {
+ /**
+ * @Assert\Range(
+ * min = "first day of January",
+ * max = "first day of January next year"
+ * )
+ */
+ protected $startDate;
+ }
+
+ .. code-block:: yaml
+
+ # src/EventBundle/Resources/config/validation.yml
+ Acme\EventBundle\Entity\Event:
+ properties:
+ startDate:
+ - Range:
+ min: first day of January
+ max: first day of January next year
+
+ .. code-block:: xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .. code-block:: php
+
+ // src/Acme/EventBundle/Entity/Event.php
+ namespace Acme\EventBundle\Entity;
+
+ use Symfony\Component\Validator\Mapping\ClassMetadata;
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Event
+ {
+ public static function loadValidatorMetadata(ClassMetadata $metadata)
+ {
+ $metadata->addPropertyConstraint('startDate', new Assert\Range(array(
+ 'min' => 'first day of January',
+ 'max' => 'first day of January next year',
+ )));
+ }
+ }
+
+Be aware that PHP will use the server's configured timezone to interpret these
+dates. If you want to fix the timezone, append it to the date string:
+
+.. configuration-block::
+
+ .. code-block:: php-annotations
+
+ // src/Acme/SocialBundle/Entity/Event.php
+ namespace Acme\EventBundle\Entity;
+
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Event
+ {
+ /**
+ * @Assert\Range(
+ * min = "first day of January UTC",
+ * max = "first day of January next year UTC"
+ * )
+ */
+ protected $startDate;
+ }
+
+ .. code-block:: yaml
+
+ # src/EventBundle/Resources/config/validation.yml
+ Acme\EventBundle\Entity\Event:
+ properties:
+ startDate:
+ - Range:
+ min: first day of January UTC
+ max: first day of January next year UTC
+
+ .. code-block:: xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .. code-block:: php
+
+ // src/Acme/EventBundle/Entity/Person.php
+ namespace Acme\EventBundle\Entity;
+
+ use Symfony\Component\Validator\Mapping\ClassMetadata;
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Event
+ {
+ public static function loadValidatorMetadata(ClassMetadata $metadata)
+ {
+ $metadata->addPropertyConstraint('startDate', new Assert\Range(array(
+ 'min' => 'first day of January UTC',
+ 'max' => 'first day of January next year UTC',
+ )));
+ }
+ }
+
+The ``DateTime`` class also accepts relative dates or times. For example, you
+can check that a delivery date starts within the next five hours like this:
+
+.. configuration-block::
+
+ .. code-block:: php-annotations
+
+ // src/Acme/SocialBundle/Entity/Order.php
+ namespace Acme\OrderBundle\Entity;
+
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Order
+ {
+ /**
+ * @Assert\Range(
+ * min = "now",
+ * max = "+5 hours"
+ * )
+ */
+ protected $deliveryDate;
+ }
+
+ .. code-block:: yaml
+
+ # src/OrderBundle/Resources/config/validation.yml
+ Acme\OrderBundle\Entity\Order:
+ properties:
+ deliveryDate:
+ - Range:
+ min: now
+ max: +5 hours
+
+ .. code-block:: xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .. code-block:: php
+
+ // src/Acme/OrderBundle/Entity/Order.php
+ namespace Acme\OrderBundle\Entity;
+
+ use Symfony\Component\Validator\Mapping\ClassMetadata;
+ use Symfony\Component\Validator\Constraints as Assert;
+
+ class Order
+ {
+ public static function loadValidatorMetadata(ClassMetadata $metadata)
+ {
+ $metadata->addPropertyConstraint('deliveryDate', new Assert\Range(array(
+ 'min' => 'now',
+ 'max' => '+5 hours',
+ )));
+ }
+ }
+
Options
-------
@@ -145,3 +360,4 @@ the `is_numeric`_ PHP function).
.. include:: /reference/constraints/_payload-option.rst.inc
.. _`is_numeric`: http://www.php.net/manual/en/function.is-numeric.php
+.. _`accepted by the DateTime constructor`: http://www.php.net/manual/en/datetime.formats.php