respect-validation/docs/validators/DateTimeDiff.md
Henrique Moody 7db3bea8a6
Enhance LintSpdxCommand with contributor tracking and header normalization
Improves SPDX header linting to ensure consistent license metadata across
the codebase.

Key changes:

- Enforce deterministic tag ordering (License-Identifier, FileCopyrightText,
  FileContributor) to ensure consistency, prevent merge conflicts, and
  simplify code reviews

- Add contributor alias mapping to consolidate contributors with multiple
  emails or name variations (e.g., "nickl-" → "Nick Lombard")

- Add --contributions-strategy option with "blame" (current code authors)
  and "log" (all historical contributors) to support different attribution
  philosophies

- Add optional path argument to lint specific files or directories

- Add --fix option to automatically correct header issues

Assisted-by: Claude Code (claude-opus-4-5-20251101)
2026-02-03 15:23:20 +01: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::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.

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