【问题标题】:Filter days of week and just show working days in php过滤星期几,只在php中显示工作日
【发布时间】:2014-06-15 22:40:12
【问题描述】:

我正在尝试在一周的工作日创建一个下拉菜单。周一至周五。这是我的代码:

<?php if ($_SESSION['month'] == $current_month) { $current_day = date("j") + 1;} else {$current_day = 1;} ?>

<form action="" method="post">
  <select name="day" onchange="this.form.submit()">
    <option value="">-- Day --</option>
    <?php for ($i = $current_day; $i < 31; $i++) { ?>
    <option value="<?php echo $i; ?>" <?php echo $i == $_SESSION['day'] ? "selected='selected'":""; ?> >
    <?php $tmp_date = $_SESSION['year']."/".$_SESSION['month']."/".$i; 
          $weekday = date('D', strtotime($tmp_date)); 
          echo $weekday." "; ?>
    <?php echo $i; ?>
    </option>
    <?php } ?>
  </select>
</form>

这给了我当月的星期几,但它显示了所有的日子。我怎样才能只显示周一 - 周五?

【问题讨论】:

  • 澄清一下,您只需要当月一周的工作日吗?比如周一、周二等?
  • 只需检查date('N") 是否为&lt; 6(周六),即周一从1 开始,周日从7 开始的工作日编号。
  • 是的,John Conde - 没错

标签: php date loops time format


【解决方案1】:

看起来$weekday 正在为您获取名称。只需做一个 nocase 字符串比较:

      $weekday = date('D', strtotime($tmp_date)); 
      if (strcasecmp($weekday, 'Sun') != 0
          && strcasecmp($weekday, 'Sat') != 0){
          // Do something with valid days
      }

【讨论】:

    【解决方案2】:
    <?php $tmp_date = $_SESSION['year']."/".$_SESSION['month']."/".$i; ?>
    <?php if (!in_array(date('w', strtotime($tmp_date)), array(0, 6)) { ?>
    <option value="<?php echo $i; ?>" <?php echo $i == $_SESSION['day'] ? "selected='selected'":""; ?> >
    
          $weekday = date('D', strtotime($tmp_date)); 
          echo $weekday." "; ?>
    <?php echo $i; ?>
    </option>
    <?php } ?>
    

    【讨论】:

      【解决方案3】:

      这比strtotime()清晰得多:

      $start       = DateTime::createFromFormat('Y-n-j', $_SESSION['year'].'-'.$_SESSION['month'].'-01');
      $daysInMonth = $start->format('t'); 
      $end         = new DateTime("+{$daysInMonth} Days");
      $interval    = new DateInterval('P1D');
      $period      = new DatePeriod($start, $interval, $end);
      foreach ($period as $day) {
          if (in_array($day->format('D'), array('Sat', 'Sun'))) continue;
          printf('<option value="%s"%s>%s %u</option>',
               $day->format('j'),
               ($_SESSION['day'] == $day->format('j')) ? ' selected' : '',
               $day->format('D'),
               $day->format('j')
          );
      }
      

      Demo

      【讨论】:

        【解决方案4】:

        这对我有用:

        <form action="" method="post">
          <select name="day" onchange="this.form.submit()">
            <option value="">-- Day --</option>
            <?php for ($i = $current_day; $i < 31; $i++) { 
            $tmp_date = $_SESSION['year']."/".$_SESSION['month']."/".$i; 
                  $weekday = date('D', strtotime($tmp_date)); 
                  if (strcasecmp($weekday, 'Sun') != 0
                    && strcasecmp($weekday, 'Sat') != 0){ ?>
            <option value="<?php echo $i; ?>" <?php echo $i == $_SESSION['day'] ? "selected='selected'":""; ?> >
            <?php echo $weekday." ".$i; ?>
         <?php  } ?>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-02
          • 2015-10-28
          • 1970-01-01
          相关资源
          最近更新 更多