PHP日期,如何防止PHP日期自动转换为第二天?

时间:2018-10-30 04:33:40

标签: php

您可能知道,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的内容?请不要简单地将此标记为重复,在标记之前先将我的问题与其他问题进行比较。谢谢

3 个答案:

答案 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函数禁用字段中的文本输入,并仅允许单击,以使日期选择器出现。