Skip to content

Date Rules

Date validation rules check date formats and date comparisons.

RuleParametersExampleError Message
date$v->rule('date', 'field'){field} is not a valid date
dateFormatformat$v->rule('dateFormat', 'field', 'Y-m-d'){field} must be a valid date in the format {0}
dateBeforedate$v->rule('dateBefore', 'field', '2024-12-31'){field} must be a date before {0}
dateAfterdate$v->rule('dateAfter', 'field', '2024-01-01'){field} must be a date after {0}
pastreference?$v->rule('past', 'field'){field} must be a date in the past
futurereference?$v->rule('future', 'field'){field} must be a date in the future

Note: Parameters marked with ? are optional.

Accepted date formats: DateTime objects, ISO 8601 (2024-01-15), common formats (01/15/2024), Unix timestamps, anything parseable by strtotime().

Common format strings:

FormatExample
Y-m-d2024-01-15
d/m/Y15/01/2024
m/d/Y01/15/2024
Y-m-d H:i:s2024-01-15 14:30:00

Security: past and future reject relative strings like +1 week or tomorrow.


Valicomb supports two syntax styles: rule-based (map rules to fields) and field-based (map fields to rules).

use Frostybee\Valicomb\Validator;
$v = new Validator($data);
$v->rules([
'date' => [
['birth_date'],
['hire_date']
],
'dateFormat' => [
['birth_date', 'Y-m-d'],
['event_time', 'Y-m-d H:i:s']
],
'dateBefore' => [
['birth_date', '2010-01-01'],
['start_date', '2025-12-31']
],
'dateAfter' => [
['end_date', '2024-01-01'],
['hire_date', '2000-01-01']
],
'past' => [
['birth_date'],
['graduation_date']
],
'future' => [
['appointment_date'],
['delivery_date']
]
]);
$v->validate();
use Frostybee\Valicomb\Validator;
$v = new Validator($data);
$v->mapManyFieldsToRules([
'birth_date' => ['required', 'date', ['dateFormat', 'Y-m-d'], 'past'],
'start_date' => ['required', 'date', ['dateBefore', '2025-12-31']],
'end_date' => ['required', 'date', ['dateAfter', '2024-01-01']],
'appointment_date' => ['required', 'date', 'future'],
'event_datetime' => ['optional', ['dateFormat', 'Y-m-d H:i:s']],
'graduation_date' => ['optional', 'date', 'past']
]);
$v->validate();