PHP 关于判断输入日期是否合法

合法要求

  • 一年仅十二个月
  • 4,6,9,11月仅30天,1,3,5,7,8,10,12月仅31天
  • 闰年2月29天,否则28天
  • 输入的变量年,月,日为数字

代码:

<?php
//PHP中判断输入的字符串是否是合法日期
function checkdate($data){
$date=strtotime($data);
if($data==(date("Y-m-d", $date))|| $data==(date("Y-m-j", $date))||$data==(date("Y-n-d", $date))||$data==(date("Y-n-j", $date)))
echo "合法<br>";
else
echo "非法<br>";
}
//实例
checkdate("2008-");//输出“非法”
checkdate("a-b-c");//输出“非法”
checkdate("2009-2-29");//输出“非法”
checkdate("2009-03-31");//输出“非法”
checkdate("2008-01-10");//输出“合法”
checkdate("2008-2-29");//输出“合法”
?>

碎碎念与笔记

当我在写这一段碎碎念的时候其实我是想举例参考其他代码时无法实现的部分错误性,可是重新验证大概只是我当时又在哪个地方打错了什么字符,内心十分复杂。

大概思路就是将输入的字符串转换为时间戳的形式,再转换为字符串性可自定义的日期形式与原字符串进行一个比较。

strtotime()函数限定了一年仅12月,1个月最多只有31天否则返回false。但像4月31日这样的输入同样存在时间戳,进一步用date()函数将其转化为日期格式时输出的是5月1日,因此与原字符串进行比对是判断日期是否合法的关键方法。

var_dump(date("Y-m-d",$time = strtotime("2018-4-31")));
//输出string '2018-05-01' (length=10)

大部分参考代码在$data==(date("Y-m-d", $date))就差不多到此为止了,因此在输入"2018-2-1"这样的数据时大概会判断错误。因为被比较的字符串为“2018-2-1”,与之比较的字符串在经过date()函数转化后为“2018-02-01”("Y-m-d"自动补0)

var_dump(date("Y-m-d",$time = strtotime("2018-2-1")));
//输出string '2018-02-01' (length=10)

感觉可能还是有一点简化的空间,如果以后想出来再修改这一篇博客吧。✧。(ˊᗜˋ)

上一篇:[测试题]数组(array)


下一篇:深入理解 KVC\KVO 实现机制 — KVO