Back to Validation

DateTimeDiff

docs/validators/DateTimeDiff.md

3.1.15.1 KB
Original Source
<!-- SPDX-License-Identifier: MIT SPDX-FileCopyrightText: (c) Respect Project Contributors SPDX-FileContributor: Alexandre Gomes Gaigalas <[email protected]> SPDX-FileContributor: Henrique Moody <[email protected]> -->

DateTimeDiff

  • DateTimeDiff("years"|"months"|"days"|"hours"|"minutes"|"seconds"|"microseconds" $type, Validator $validator)
  • DateTimeDiff("years"|"months"|"days"|"hours"|"minutes"|"seconds"|"microseconds" $type, Validator $validator, string $format)
  • DateTimeDiff("years"|"months"|"days"|"hours"|"minutes"|"seconds"|"microseconds" $type, Validator $validator, string $format, DateTimeImmutable $now)

Validates the difference of date/time against a specific validator.

The $format argument should follow PHP's date() function. When the $format is not given, this validator accepts Supported Date and Time Formats by PHP (see strtotime()).

php
v::dateTimeDiff('years', v::greaterThan(18), 'd/m/Y')->assert('09/12/1990');
// Validation passes successfully

v::dateTimeDiff('years', v::equals(7))->assert('7 years ago');
// → The number of years between now and "7 years ago" must be equal to 7

v::dateTimeDiff('years', v::equals(7))->assert('7 years ago + 1 minute');
// → The number of years between now and "7 years ago + 1 minute" must be equal to 7

v::dateTimeDiff('years', v::greaterThan(18), 'd/m/Y')->assert('09/12/2023');
// → The number of years between "01/01/2024" and "09/12/2023" must be greater than 18

v::dateTimeDiff('months', v::between(1, 18))->assert('5 months ago');
// Validation passes successfully

The supported types are:

  • years
  • months
  • days
  • hours
  • minutes
  • seconds
  • microseconds

Templates

DateTimeDiff::TEMPLATE_STANDARD

Used when $format and $now are not defined.

ModeTemplate
defaultThe number of {{type|trans}} between now and
invertedThe number of {{type|trans}} between now and

DateTimeDiff::TEMPLATE_CUSTOMIZED

Used when $format or $now are defined.

ModeTemplate
defaultThe number of {{type|trans}} between {{now}} and
invertedThe number of {{type|trans}} between {{now}} and

DateTimeDiff::TEMPLATE_NOT_A_DATE

ModeTemplate
defaultFor comparison with {{now|raw}}, {{subject}} must be a datetime
invertedFor comparison with {{now|raw}}, {{subject}} must not be a datetime

DateTimeDiff::TEMPLATE_WRONG_FORMAT

Used when the input cannot be parsed with the given format.

ModeTemplate
defaultFor comparison with {{now|raw}}, {{subject}} must be a datetime in the format {{sample|raw}}
invertedFor comparison with {{now|raw}}, {{subject}} must not be a datetime in the format {{sample|raw}}

Template as prefix

The template serves as a prefix to the template of the inner validator.

php
v::dateTimeDiff('years', v::equals(2))->assert('1 year ago');
// → The number of years between now and "1 year ago" must be equal to 2

v::not(v::dateTimeDiff('years', v::lessThan(8)))->assert('7 year ago');
// → The number of years between now and "7 year ago" must not be less than 8

Template placeholders

PlaceholderDescription
subjectThe validated input or the custom validator name (if specified).
nowThe date and time that is considered as now.
sampleA sample of the datetime.
typeThe type of interval (years, months, etc.).

Caveats

When using custom templates, the key must be dateTimeDiff + name of the validator you passed, for example:

php
v::dateTimeDiff('years', v::equals(2))->assert('1 year ago', [
    'dateTimeDiffEquals' => 'Please enter a date that is 2 years ago'
]);
// → Please enter a date that is 2 years ago

Categorization

  • Date and Time

Changelog

VersionDescription
3.0.0Created from Age, MinAge, and MaxAge

See Also