• 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)
    

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

  • 相关阅读:
    转:MVC分页
    转:更新Android SDK之后Eclipse提示ADT版本过低的一个简易解决办法
    DataGridView 添加鼠标右键选择行
    WinForm 中使用ScintillaNet
    C#获取当前程序运行路径的方法集合
    Winform DataGridView鼠标右键选择列
    EF 数据查询(更改默认排序)
    使用lambda表达式进行对象结合的筛选操作
    使用SSIS生成数据导出为Excel文件的模板
    Sql server 数据库中计算每天的开始结束时间
  • 原文地址:https://www.cnblogs.com/wuyajunyimiba/p/10548299.html
Copyright © 2020-2023  润新知