Проверьте дату и время RFC3339 с помощью php - PullRequest
0 голосов
/ 14 октября 2018

Любые рекомендации, как проверить, что дата-время является действительным RFC3339?Я знаю, что могу преобразовать его во время Unix, а затем отформатировать как действительный RFC3339, но я не хочу этого делать и вместо этого принудительно установить правильный формат.http://mattallan.org/posts/rfc3339-date-time-validation/ предлагает использовать регулярные выражения, будет только в крайнем случае.Спасибо

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

DateTime имеет предопределенную константу формата DaTeTime::RFC3339.Так как createFromFormat возвращает false, если не может проанализировать дату в соответствии с предоставленным форматом, вы можете использовать эту проверку в качестве валидатора:

validRFC3339Date("2018-01-29T20:36:01Z");
validRFC3339Date("2018-01-29T20:36:01+00:00");

validRFC3339Date("2018-01-22 20:36");
validRFC3339Date("2018-09-28T16:00:05.000Z");

function validRFC3339Date($date) {
    if (DateTime::createFromFormat(DateTime::RFC3339, $date) === FALSE) {
        echo "$date: Invalid RFC3339\n";
    } else {
        echo "$date: Valid RFC3339\n";
    }
}
0 голосов
/ 14 октября 2018

Если вы решите использовать регулярное выражение, вы можете использовать следующий код:

preg_match('/^([0-9]+)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])[Tt]([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\.[0-9]+)?(([Zz])|([\+|\-]([01][0-9]|2[0-3]):[0-5][0-9]))$/', $time);

Это вернет true, если $ time соответствует регулярному выражению.

...