我需要检查日期是否具有保存日期的格式,我使用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'..这种格式有什么问题?
答案 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 Manual和 REGEX Builder & Tester