respect-validation/docs/validators/DateTimeDiff.md
Alexandre Gomes Gaigalas bd48bdcda4 Lint Changelog format in validator docs
Introduces a Markdown linter for checking the Changelog format.

"See Also" was transformed into a section to make it easier to
handle it with the `Content` class. The "Related" linter was
simplified to reflect that change too.

An additional "alignment" parameter was added to markdown table
generators, allowing the padding and headers to be explicitly
marked with a specific left (-1), middle (0) or right(1)
alignment.

Existing files were fixed using the `fix` option after the
changes.
2026-01-26 19:11:00 +00:00

5 KiB

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()).

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/1990');
// Validation passes successfully

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.

Mode Template
default The number of {{type|trans}} between now and
inverted The number of {{type|trans}} between now and

DateTimeDiff::TEMPLATE_CUSTOMIZED

Used when $format or $now are defined.

Mode Template
default The number of {{type|trans}} between {{now}} and
inverted The number of {{type|trans}} between {{now}} and

DateTimeDiff::TEMPLATE_NOT_A_DATE

Mode Template
default For comparison with {{now|raw}}, {{subject}} must be a valid datetime
inverted For comparison with {{now|raw}}, {{subject}} must not be a valid datetime

DateTimeDiff::TEMPLATE_WRONG_FORMAT

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

Mode Template
default For comparison with {{now|raw}}, {{subject}} must be a valid datetime in the format {{sample|raw}}
inverted For comparison with {{now|raw}}, {{subject}} must not be a valid datetime in the format {{sample|raw}}

Template as prefix

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

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

Placeholder Description
subject The validated input or the custom validator name (if specified).
now The date and time that is considered as now.
sample A sample of the datetime.
type The type of interval (years, months, etc.).

Caveats

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

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

Version Description
3.0.0 Created from Age, MinAge, and MaxAge

See Also