Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查日期是否具有特定格式_Php_Date_Datetime - Fatal编程技术网

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

Php 检查日期是否具有特定格式,php,date,datetime,Php,Date,Datetime,我需要检查一个日期是否有保存它的格式或否,我使用函数strptime(): 问题是格式似乎不起作用,我需要用格式年份验证所有日期(如:2010年、2020年……),但它们不是验证的,我不明白为什么在php日期文档中Y表示4位数的年份 有人有主意吗 编辑:使用CreateFromFormat: if(DateTime::createFromFormat('Y', $contact[22])){ dsm("Bon format : ".$contact[22]); $date

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

问题是格式似乎不起作用,我需要用格式年份验证所有日期(如: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”。。这种格式有什么问题?

在这种情况下会有所帮助。如果给定的日期字符串不是给定的格式,它将返回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
。可以使用函数转换为任何格式。

在这种情况下会有所帮助。如果给定的日期字符串不是给定的格式,它将返回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
。可以使用函数转换为任何格式。

您可以使用简单的正则表达式来完成此操作

/(\d{4})/
示例代码:

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

有关正则表达式的更多信息,请查看 和
您可以使用一个简单的正则表达式来实现这一点

/(\d{4})/
示例代码:

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

有关正则表达式的更多信息,请查看 和

谢谢这项工作,但我有点奇怪,我在createFromFormat中使用的格式是“Y”,但是只有两个数字的值也被验证了,如何避免呢?谢谢这项工作,但我有点奇怪,我在createFromFormat中使用的格式是“Y”,但是只有两个数字的值也被验证了,如何避免这种情况?在
$contact[22]
中的值是什么?我这里有多个值:输出:Bon format:0 Bon format:1996 Bon format:96,正如您可以看到的,所有值都已验证,另一个问题是,例如2012值,输出为2012-07-11 10:33:47.000000,我需要2012-01-01 00:00:000,
$contact[22]
中的值是什么?我有多个值,这里是输出:Bon format:0 Bon format:1996 Bon format:96,正如您可以看到的,所有值都已验证,另一个问题是,例如2012值,输出是2012-07-11 10:33:47.000000,我需要2012-01-01 00:00:0000