检查日期是否具有特定格式

时间:2018-07-11 08:20:02

标签: php date datetime

我需要检查日期是否具有保存日期的格式,我使用strptime()函数:

if (!strptime($contact[14], '%Y') && isset($contact[14]) && $contact[14] != ""){
      $date_naissance =  $contact[14];
      dsm("BON FORMAT : ".$contact[14]);
    } else {
      $date_naissance = null;
      dsm("MAUVAIS FORMAT : ".$contact[14]);
    }

问题是格式似乎无法正常工作,我需要用格式年份验证所有日期(例如:2010、2020,..),但它们没有验证,我不明白为什么,在php日期文档Y是4位数字的年份表示形式。

有人知道吗?

编辑:使用CreateFromFormat:

if(DateTime::createFromFormat('Y', $contact[22])){
      dsm("Bon format : ".$contact[22]);
      $date_derniere_inscription = strtotime($contact[22]);
    } else {
      $date_derniere_inscription = null;
    }

但是只有两位数字的日期甚至是值为0的日期也会被验证。

“ Y”格式似乎不起作用,它使用所有值(例如2012,但也使用96或0)创建日期,使用0值创建“ 0000-07-11 10:38”: 45.000000'..这种格式有什么问题?

2 个答案:

答案 0 :(得分:2)

createFromFormat在这种情况下可以提供帮助。如果给定的日期字符串不是给定的格式,它将返回false。

$date = DateTime::createFromFormat('Y-m-d', '11-Jan-2018');

if ($date) {
    echo 'In format';
} else {
    echo 'Not in format';
}

要重置除年份以外的所有字段(月,日,分钟,秒),可以使用:

$date = DateTime::createFromFormat('Y|', '2012');

输出将为:2012-01-01 00:00:00.000000。可以使用format()函数转换为任何格式。

答案 1 :(得分:0)

您可以使用简单的正则表达式来做到这一点。

/(\d{4})/

示例代码:

<?php
$pattern = "/(\d{4})/";
$year = "2015";
if(preg_match($pattern, $year)){
    echo "Format correct!";
} else{
    echo "Format incorrect!";
}
?>

有关正则表达式的更多信息,请检查 PHP ManualREGEX Builder & Tester