我正在建立一个基本的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
返回有效,当显然它不是。我的问题是为什么会这样?是否有更好的方法来检查日期是否有效和存在?
checkdate();
验证公历日期。如果给定的日期有效,则返回TRUE;否则返回FALSE。
if(checkdate(2, 31, 2011)){
echo "Yeah";
} else {echo "nah";}
返回false!
除非你有一个(或一个小集合)固定的日期字符串格式,否则很难得到一个可接受的结果。如果您知道格式,您可以直接自己解析字符串(然后使用checkdate
进行测试),或者使用strptime
尝试对已知格式进行解析,直到获得有效结果。
如果您不知道格式,并且必须使用strtotime
,那么您需要接受strtotime
将尝试以最佳方式解析日期字符串。这可能会导致日期与预期的不同。