为了账号安全,请及时绑定邮箱和手机立即绑定

验证日期时间输入以进行调度

验证日期时间输入以进行调度

PHP
四季花海 2021-12-24 10:09:32
我有一个调度系统学校项目,我需要创建一个函数来验证用户输入的日期,检查它是否提前 2 天,而不是星期日,以及是否在工作时间之间。我正在使用 codeigniter 框架。//my controller looks like this:public function checkDateTimeInput(){        $dateTimeInput = $this->input->post('dateTimeInput');        if($dateTimeInput /*Greater than 2 days or more*/ && /*not sunday*/ && /*between 8AM-5PM*/){            return true;        }else{            return false;        }    }//in my view:<?php echo form_open('schedules/checkDateTimeInput'); ?>    <input type="datetime-local" name="dateTimeInput">    <input type="submit" value="submit"></form>
查看完整描述

2 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

为了完成起见,我将考虑<input type="datetime-local" name="dateTimeInput">作为输入。


所以这基本上创建了这种格式:


d/m/Y h:i A

我在我的浏览器 (Chrome) 上尝试过,它确实做到了。更多信息也在这里:


https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/datetime-local


因此,考虑到这一点,您可以使用createFromFormat来解析输入并使用DateTime类。


$input = DateTimeImmutable::createFromFormat('d/m/Y h:i A', $dateTimeInput);

$dt = new DateTime; // now

if (

    ($input >= $input->setTime(8, 0) && $input <= $input->setTime(17, 0)) && // time is between 8 to 5

    $input->format('l') !== 'Sunday' && // is not sunday

    $dt->diff($input)->d >= 2 // is greater or more than two days


) {

    return true;

}


return false;

这是一个示例输出


旁注:我还应该指出type="datetime-local" Firefox 浏览器不支持,应该考虑使用实时日期时间插件代替。如果用户碰巧使用 Firefox,您应该准备回退。


查看完整回答
反对 回复 2021-12-24
?
达令说

TA贡献1821条经验 获得超6个赞

您可以使用以下函数并从控制器调用它。


function checkDateConditions( $dateTimeInput ) {

    //Make DateTime Object using the input

    $inputDate = new DateTime( $dateTimeInput );


    //Get the Hour from the Date Input

    $inputHour = $inputDate->format('G');


    //Check Time is between 8AM and 5PM ( 5PM is = 17)

    if( $inputHour < 8 || $inputHour > 17) {

        return false;

    }


    //This Returns 7 for Sunday

    $dayOfWeek = $inputDate->format('N');

    //If its Sunday we return false

    if( $dayOfWeek == 7) {

        return false;

    }


    //Calculate Date Difference

    $now = new DateTime( Date('Y-m-d') );

    $diff =  $inputDate->diff($now);


    //If date difference is greater than 2 days return false

    if( $diff->days > 2 ) {

        return false;

    }

    //If it reaches here it means all conditions are met so retrun true.

    return true;

}


查看完整回答
反对 回复 2021-12-24
  • 2 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信