您可能知道,php date将在以下日期返回有效日期:
year-04-31
year-06-31
year-09-31
我已经阅读了其他{{3}}关于不存在的日期的信息,但是该线程无法解决我的问题。我的目标是防止php自动将这些日期转换为第二天。例如,如果用户输入日期2018-04-31
,则系统将提示错误。
$value = '2018-06-31'; // assume user input this date
if(date is 04-31, 06-31 or 09-31) // i have no idea what to put here
echo 'wrong date, please enter again';
编辑
有人实际上将此问题发布为SO thread here的重复......其中哪一部分说了关于4-31、6-31、9-31的内容?请不要简单地将此标记为重复,在标记之前先将我的问题与其他问题进行比较。谢谢
答案 0 :(得分:1)
尝试以下
<?php
$date = '2018-06-31';
function checkIsAValidDate($date){
return (bool)strtotime($date) && date("Y-m-d", strtotime($date)) == $date;
}
if(checkIsAValidDate($date) == 1){
echo 'valid';
}else{
echo 'not valid';
}
?>
这将验证格式,并且日期是真实的。 IE,六月中只有30天。
答案 1 :(得分:0)
strtotime
将在无法将字符串转换为时间戳的情况下返回FALSE
。因此,您可以尝试:
if (strtotime('<your date time string here>') === false) {
// TODO.
}
-----编辑----- 感谢@Nick。
strtotime
在某些情况下可能会误为'02 -30'。所以我建议another solution:
$date = explode('-', '<date time string>');
if (checkdate($date[1], $date[2], $date[0]) {
// TODO
}
答案 2 :(得分:-2)
我想您不允许用户在30个月的月份中输入31号。在那种情况下,为什么不简单地使用日期选择器呢?与其允许用户输入日期,不如让他们选择一个。如果您不希望在选择日期后进行编辑,则可以使用javascript函数禁用字段中的文本输入,并仅允许单击,以使日期选择器出现。