strtotime日期验证在无效日期传递

时间:2011-11-07 10:34:21

标签: php date strtotime

我正在设置一个基本的CMS,允许客户将文章添加到他们的移动应用程序中。 CMS使用PHP编码,并将使用JSON将内容传送到移动应用程序。

现在我的问题是有一个选项可以在特定日期发布文章,所以我想验证日期以检查它是否有效。

因此,为了测试可能性,我制作了一个小脚本。我使用strtotime()检查日期是否有效,我的脚本是:

<?php

    $date[] = '2011-31-01';
    $date[] = '2011-02-31';

    foreach($date as $str) {
        if(strtotime($str) == false) {
            $result[] = '<p>[' . $str . '] Resulted in an <span style="color: red;">Error.</span></p>';
        } else {
            $result[] = '<p>[' . $str . '] Resulted in <span style="color: green;">Success.</span></p>';
        }
    }

    foreach($result as $return) {
        echo $return;
    }

?>

现在我的问题是2011-02-31的日期31st February 2011返回有效,显然不是。所以我的问题是它为什么这样做?有没有更好的方法来检查日期是否有效并且存在?

提前致谢。

2 个答案:

答案 0 :(得分:6)

checkdate();验证格里高利日期。如果给定的日期有效,则返回TRUE;否则返回FALSE。

 if(checkdate(2, 31, 2011)){
      echo "Yeah";

  } else {echo "nah";}

它返回false!

这是要走的路。

答案 1 :(得分:2)

除非您的日期字符串有一个(或一小组)固定格式,否则很难获得可接受的结果。如果您知道格式,可以直接自己解析字符串(然后使用checkdate对其进行测试),或者使用strptime尝试解析已知格式,直到获得有效结果。< / p>

如果您不知道格式,并且必须使用strtotime,那么您需要接受strtotime将尝试以最佳方式解析日期字符串。这可能会导致日期不同于预期。

相关问题