我正在设置一个基本的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
返回有效,显然不是。所以我的问题是它为什么这样做?有没有更好的方法来检查日期是否有效并且存在?
提前致谢。
答案 0 :(得分:6)
checkdate();
验证格里高利日期。如果给定的日期有效,则返回TRUE;否则返回FALSE。
if(checkdate(2, 31, 2011)){
echo "Yeah";
} else {echo "nah";}
它返回false!
这是要走的路。
答案 1 :(得分:2)
除非您的日期字符串有一个(或一小组)固定格式,否则很难获得可接受的结果。如果您知道格式,可以直接自己解析字符串(然后使用checkdate
对其进行测试),或者使用strptime
尝试解析已知格式,直到获得有效结果。< / p>
如果您不知道格式,并且必须使用strtotime
,那么您需要接受strtotime
将尝试以最佳方式解析日期字符串。这可能会导致日期不同于预期。