【问题标题】:Check if date is allowed weekday in php?检查php中是否允许工作日?
【发布时间】:2010-05-11 10:36:03
【问题描述】:

我遇到了一个问题,如何检查特定日期是否在 php 中允许的工作日数组内。例如,

    function dateIsAllowedWeekday($_date,$_allowed)
    {
    if ((isDate($_date)) && (($_allowed!="null") && ($_allowed!=null))){
    $allowed_weekdays=json_decode($_allowed);
    $weekdays=array();

    foreach($allowed_weekdays as $wd){
    $weekday=date("l",date("w",strtotime($wd)));
    array_push($weekdays,$weekday);
    }
    if(in_array(date("l",strtotime($_date)),$weekdays)){return TRUE;}
    else {return FALSE;}
        }
        else {return FALSE;}
    }
 /////////////////////////////   
    $date="21.05.2010"; //actually is Friday (5)
    $wd="[0,1,2]"; //Sunday,Monday,Tuesday

    if(dateIsAllowedWeekday($date,$wd)){echo "$date is within $wd weekday values!";} 
    else{echo "$date isn't within $wd weekday values!"}

我输入了格式为“d.m.Y”的日期和一个从数据库返回的数组,其中包含工作日数字(格式为“星期几的数字表示”),例如 [0,1,2] -(星期日、星期一、星期二)。

从数据库返回的字符串可以是“null”,所以我也检查一下。然后isDate函数检查date是否为日期,是否正常。

我想检查我的日期,例如 21.05.2010 是否是此数组中允许的工作日。我的函数总是返回 TRUE 并且不知何故工作日总是“星期四”,我不知道为什么......

有没有其他方法可以检查这一点,或者我在上面的代码中的错误是什么?谢谢

【问题讨论】:

    标签: php date weekday


    【解决方案1】:

    我不知道你为什么觉得需要将星期几转换成字符串(例如“Sunday”),因为你最后只返回一个布尔值;无论如何,我已经删除了该部分,下面的代码应该可以按预期运行:

    function dateIsAllowedWeekday($_date,$_allowed)
    {
      if ((isDate($_date)) && (($_allowed!="null") && ($_allowed!=null)))
      {
        $allowed_weekdays = json_decode($_allowed);
    
        if (in_array(date("w", strtotime($_date)), $allowed_weekdays))
        {
          return TRUE;
        }
      }
    
      return FALSE;
    }
    

    使用 21.05.2010(返回 false)和 11.05.2010(返回 true)进行测试,您的 allowed_weekdays 如上所述 ([0,1,2])。

    【讨论】:

      【解决方案2】:

      如果你已经运行了 PHP5.3,你也可以这样做:

      function date_validWeekday($format, $date, array $weekdays) {
          return in_array(
              DateTime::createFromFormat($format, $date)->format('w'),
              $weekdays);
      }
      
      var_dump(date_validWeekday('d.m.Y', '21.05.2010', array(0,1,2))); // FALSE
      var_dump(date_validWeekday('d.m.Y', '11.05.2010', array(0,1,2))); // TRUE
      

      【讨论】:

      • 谢谢我还没有,但是顺便说一句,我可以检查代码中的 php 版本吗(不是使用phpinfo())?
      【解决方案3】:

      星期四一直返回的原因是因为您在一位数整数上使用strtotime()

      $weekday=date("l",date("w",strtotime($wd)));
      

      发生了两件事中的一件,我想我不确定是哪一件:

      1. 函数将整数解释为纪元时间戳,或

      2. 函数返回 false,date 函数将其作为 0

      无论哪种情况,您都在原始 Epoch 开始时间的 10 秒内:

      Thu, 01 Jan 1970 00:00:00 GMT
      

      星期四。

      【讨论】:

        【解决方案4】:
        function dateIsAllowedWeekday($_date,$_allowed){
            if ((isDate($_date)) && (($_allowed!="null") && ($_allowed!=null))){
                return in_array(date("w",strtotime($_date)),json_decode($_allowed));
            }
        
            return false;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-13
          • 2014-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多