【问题标题】:PHP print dates without sundayPHP 打印没有星期天的日期
【发布时间】:2017-04-20 12:48:35
【问题描述】:

我有这个输入字段的表单

<input type="text" name="txt_datetimein" class="form-control datetime">
<input type="text" name="txt_datetimeout" class="form-control datetime">
<input type="text" name="txt_lenght" class="form-control">

我输入第一个日期和第二个日期以及长度我精确的重复次数

比我点击下一步,我一整天都没有星期天

例如,如果我将 5 放入长度和 datetimein 01-04-2017 8:00:00 并且 datetimeout 是 01-04-2017 5:00:00

输出会是这样的

    Date IN             Date Out           Day
01-04-2017 8:00:00  01-04-2017 5:00:00   Saturday
03-04-2017 8:00:00  03-04-2017 5:00:00   Monday
04-04-2017 8:00:00  04-04-2017 5:00:00   Tuesday
05-04-2017 8:00:00  05-04-2017 5:00:00   Wednesday
06-04-2017 8:00:00  06-04-2017 5:00:00   Thursday
07-04-2017 8:00:00  07-04-2017 5:00:00   Friday

这是我的代码,但它整天都在打印

<?php
    for($i=0;$i<=$lenght;$i++) {
        $date = date('m/d/Y H:i:s', strtotime("+$i days", strtotime($datetimein)));   
        $edate = date('m/d/Y H:i:s', strtotime("+$i days", strtotime( $datetimeout))); 
        $is_sunday = date('l', strtotime($date)) == 'Sunday';             
        if ($is_sunday) {             
            $day = date('l', strtotime("+1+$i days",strtotime($datetimein)));
        }
        else {
            $day = date('l', strtotime("+$i days",strtotime($datetimein)));
        }  
    }
?>

我该如何解决我的问题??!!

【问题讨论】:

  • 因为你加了一天,如果它是星期天,它不显示星期天? $day=date('l', strtotime("+1+$i days",strtotime($datetimein)));
  • 这行代码让你跳过 sunday$day = date('l', strtotime("+1+$i days",strtotime($datetimein))); +1 in +1+$i
  • @Cr1xus 我不想在星期天打印,但我的代码在星期天打印
  • 您已将 5 描述为长度并打印了 7 个日期,而且日期时间进出是同一日期,其中 intime 大于 out time !!!你想做什么,你能告诉我们情况吗?所以我们可以提供更好的帮助。如果进出日期相同,为什么要同时提供?您可能需要输入开始日期以及您需要多少个日期(长度)。正确吗?

标签: php


【解决方案1】:

试试下面的代码

$datetimein = "01-04-2017 8:00:00";
    $datetimeout = "01-04-2017 5:00:00";
    $lenght = 20;
    for($i=0;$i<=$lenght;$i++) {
        $date = date('m/d/Y H:i:s', strtotime("+$i days", strtotime($datetimein)));   
        $edate = date('m/d/Y H:i:s', strtotime("+$i days", strtotime( $datetimeout))); 
        $is_sunday = date('l', strtotime($date)); 
        if($is_sunday == "Sunday")
        {
            $i=$i+1;
        }
        $day = date('l', strtotime("$i days",strtotime($datetimein)));   

        echo $day."<br>";
    }

【讨论】:

  • 周六周六比周一打印
  • 如果 $lenght 大于 6 则为星期日打印
【解决方案2】:

使用DateTime 和所有这些对象。更简单,更清洁:-)

<?php

$begin = new DateTime();
$end = clone $begin;
$end = $end->modify('+14 day'); 

$interval = new DateInterval('P1D');
$range = new DatePeriod($begin, $interval ,$end);

foreach($range as $date) {
    if ($date->format('N') !== 7) {
        echo $date->format('Y-m-d'), '<br>';
    }
}

日期格式N 是星期几,其中7 === Sunday

【讨论】:

    【解决方案3】:

    这是你的程序

    $datetimein =   '01-04-2017 8:00:00';
    $datetimeout=   '01-04-2017 5:00:00';
    $lenght =   5;
    
    $i=0;
    $days   =   array();
    $dt =   strtotime($datetimein);
    while($i < $lenght){
        if(date('D',$dt)!='Sun'){
            $days[] =   date('Y-m-d D',$dt);        
            $i++;
        }
        $dt     =   $dt+24*3600;
    }
    
    print_r($days);
    

    在这一行$days[] = date('Y-m-d D',$dt); 更改格式或保存进出时间,无论您想要什么。 $days 会有你预期的日期。

    【讨论】:

      【解决方案4】:

      您似乎拼错了变量length。 检查一下。

      <?php
      $lenght = 5;
      $in_temp = 0;
      $out_temp = 0;
      for($i=0;$i<=$lenght;$i++) {
          $in = strtotime($datetimein) + $in_temp;
          $out = strtotime($datetimeout) + $out_temp;
          $date = date('m/d/Y H:i:s', strtotime("+$i days", $in));   
          $edate = date('m/d/Y H:i:s', strtotime("+$i days", $out)); 
          $is_sunday = strtolower(date('l', strtotime($date))) == 'sunday';             
          if ($is_sunday) {
              $in_temp += 86400 ;  // Adding 1 day in seconds.
              $day = date('l', (strtotime($date)+$in_temp));
          }
          else {
              $day = date('l', (strtotime($date)));
          }
          echo $day."\n";
      }
      ?>
      

      【讨论】:

      • 星期天还在打印
      • 我不想打印周日我想跳过周日和他的日期,就像我在上面的例子中我的代码打印周日和我不想要的那样
      • 现在是星期六星期一打印,但在星期一是打印星期天的日期
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      相关资源
      最近更新 更多