PHP日期,如何防止PHP日期自动转换为次日?

PHP日期,如何防止PHP日期自动转换为次日?,php,Php,您可能知道,php date将在以下日期返回有效日期: year-04-31 year-06-31 year-09-31 我读过其他关于不存在日期的文章,但是这个帖子并没有解决我的问题。我的目标是防止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

您可能知道,php date将在以下日期返回有效日期:

year-04-31

year-06-31

year-09-31
我读过其他关于不存在日期的文章,但是这个帖子并没有解决我的问题。我的目标是防止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';
编辑

有人真的把这个问题贴成了重复的…它说的是关于4-31,6-31,9-31的哪一部分?请不要简单地将此标记为重复,将我的问题与标记前的其他问题进行比较。谢谢

如果无法将字符串转换为时间戳,将返回
FALSE
。因此,您可以尝试:

if (strtotime('<your date time string here>') === false) {
   // TODO.
}
试试下面的方法

<?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';
}

?>


这将验证格式,并且日期是真实的。也就是说,6月份只有30天。

我想你不允许用户在30天的月份输入31天。既然如此,为什么不简单地使用日期选择器呢?不允许用户输入日期,而是让他们选择一个。如果您害怕在选择日期后进行编辑,请使用javascript功能禁用字段中的文本输入,只允许单击以显示日期选择器。

您可以使用输入类型“日期”来避免此问题。请阅读我的编辑为什么副本必须超特定地址4-31、6-31和9-31?你的问题可以也应该概括为如何检查给定的日期是否确实存在?对于这些日期,副本是完美的。我要特别强调。如果((new DateTime($date))->格式('Y-m-d')!=$date)
strotime('2018-02-30')
不返回false,我更喜欢这个
,它返回的时间戳相当于
2018-03-02
我在这里尝试了你的代码
https://rextester.com/PBKYQ2169
不工作您的解决方案是手动检查日期的月份和日期吗?有更好的解决方案吗?服务器总是要进行输入验证。没有客户端方法来强制执行有效值。这更简单,有很好的解释…谢谢
<?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';
}

?>