• 技术文章 >后端开发 >php教程

    需要一个判断函数,返回是否合法时间,PHP

    2016-12-01 00:56:30原创665
    1. 需要写一个函数isValidDate($date), 条件如下:

    function isValidDate($date)
    {
        //1. $date 是本周时 +  time()要在$date前一天的18:00之前 = true
        
        //2. $date 为下周时 +  time()要在本周四下午六点后  = true
        
        //3. 其余返回false.    (注:一周从周一开始)
        
        $orderTime = strtotime($date);
        $now = time();
        if(date('W',$orderTime) == date('W',$now) && (strtotime($date,$now) - $now) > 86400/4)   //预订前一天的18:00,截止预订
        {    
            return true;
        }
        if(date('W',$orderTime) == date('W',$now) + 1 && $now > strtotime('saturday 18:05 -2 day',$now)) //预订第二周,周四下午六点及之后
        {
            return true;
        }
            return false;
    
    }

    其中,我写第二个条件的时候,发现条件覆盖的时间好像有点问题,想看下各位的见解哈。

    回复内容:

    1. 需要写一个函数isValidDate($date), 条件如下:

    function isValidDate($date)
    {
        //1. $date 是本周时 +  time()要在$date前一天的18:00之前 = true
        
        //2. $date 为下周时 +  time()要在本周四下午六点后  = true
        
        //3. 其余返回false.    (注:一周从周一开始)
        
        $orderTime = strtotime($date);
        $now = time();
        if(date('W',$orderTime) == date('W',$now) && (strtotime($date,$now) - $now) > 86400/4)   //预订前一天的18:00,截止预订
        {    
            return true;
        }
        if(date('W',$orderTime) == date('W',$now) + 1 && $now > strtotime('saturday 18:05 -2 day',$now)) //预订第二周,周四下午六点及之后
        {
            return true;
        }
            return false;
    
    }

    其中,我写第二个条件的时候,发现条件覆盖的时间好像有点问题,想看下各位的见解哈。

    怎么感觉这是要强行给别人做面试题的呢?既然条理都能列 123 了,实现应该不是问题吧。。。

    安装 Carbon

    use Carbon\Carbon;
    
    /**
     * 校验日期
     * @param  string  $date 日期
     * @return boolean       
     */
    function isValidDate($date)
    {
        // $date 是本周时 +  time()要在$date前一天的18:00之前 = true
        if (Carbon::parse($date)->format('W') == Carbon::now()->format('W') &&
            time() < Carbon::parse($date)->subDay(1)->hour(18)->minute(0)->timestamp
        ) {
            return true;
        }
        // $date 为下周时 +  time()要在本周四下午六点后  = true
        elseif (
            Carbon::parse($date)->format('W') == Carbon::now()->addWeek(1)->format('W') &&
            time() > Carbon::now()->startOfDay()->addDay(3)->hour(18)->minute(0)->timestamp
        ) {
            return true;
        }
    
        return false;
    }

    简单改一下题主的 if 语句 return

    function isValidDate($date)
    {
        //1. $date 是本周时 +  time()要在$date前一天的18:00之前 = true
        
        //2. $date 为下周时 +  time()要在本周四下午六点后  = true
        
        //3. 其余返回false.    (注:一周从周一开始)
        
        $orderTime = strtotime($date);
        $now = time();
        if(date('W',$orderTime) === date('W',$now)) // 当前周
        {    
            // time()要在$date前一天的18:00之前 = true
            return $now < strtotime(date('Y-m-d 18:00:00',strtotime("$date -1 day")));
        }
        if(date('W',$orderTime) === (date('W',$now) + 1)) // 下周
        {
            //  time()要在本周四下午六点后  = true
            return $now > strtotime(date('Y-m-d 18:00:00',strtotime( '+'. 4-date('w') .' days' )));
        }
        return false;
    
    }

    php入门到就业线上直播课:查看学习

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    快捷开发Web应用及小程序:点击使用

    支持亿级表,高并发,自动生成可视化后台。

    专题推荐:php
    上一篇:PHP的mongo 和mongodb扩展到底啥区别? 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 浅析PHP8.0特性:Named Parameter(命名参数)• 手把手教你用PHP快速连接SqlServer• php cookis创建实现代码_PHP教程• 继续收藏一些PHP常用函数第1/2页_PHP教程• 不用数据库的多用户文件自由上传投票系统(2)_PHP教程
    1/1

    PHP中文网