preg_match date time validation

User login

While developing a custom module, I needed to validate the following date time format:

1987-11-22T23:52:12

The following code was used to create a pattern for the preg_match and to test the results. (Can be used as is.)

$pattern  = '/^([1-2][0-9]{3})-(0[1-9]|1[0-2])-([0-2][1-9]|3[0-1])T([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/';
$datetime = '2901-01-31T22:58:45';

$matches = array();

$res = preg_match($pattern, $datetime, $matches);

echo 'Matched: '.$res.PHP_EOL;

for ($i = 0; $i < count($matches); $i++)
{
  echo 'Match '.$i.': '.$matches[$i].PHP_EOL;
}

Explanation:

The first four digit (year) should start with either 1 or 2, followed by any three digits within the range 0-9.

Dash follows.

The next set of two digits (month), should start with either 0 or 1, followed followed by any three digits within the range 0-9.

Dash follows.

The next set of two digits (day), should either
Start with a digit within the range of 0-2 followed by a digit within the range of 0-9, orĀ 

start with the digit 3 followed by a digit within the range of 0-1

Letter 'T' follows.

The next set of two digits (hour), should start with either the digits 0 or 1, followed by any digit within the range 0-9, or the digit 2, followed by any digit within the range 0-3

':' follows

The next set of two digits (minutes), should start with a digit within the range of 0-5, followed by any digit within the range of 0-9

':' follows

The next set of two digits (seconds), should start with a digit within the range of 0-5, followed by any digit within the range of 0-9

Tags: 
PHP / MySQL