从输入类型添加天数日期和输入类型持续时间PHP不包括周末+ MYSQL国庆节

时间:2017-12-31 08:40:36

标签: php

我需要添加天数(输入类型编号+输入类型日期),但结果必须是数组,因此我可以一个接一个地插入数据库。

  

这是代码(提交HTML表格后):

     

<?php

$start_date = '2017-12-22';
$duration = '3';
$d = new DateTime($start_date);
$t = $d->getTimestamp();

// loop for X days
for($i=0; $i <= $duration; $i++){

    // add 1 day to timestamp-
    $addDay = 86400;

    // get what day it is next day
    $nextDay = date('w', ($t + $addDay));
    
    // if it's Saturday or Sunday get $i-1
    if($nextDay === 6 || $nextDay === 7) {
        $i --;
    }

    // modify timestamp, add 1 day
    $t = $t + $addDay;
    
    $d->setTimestamp($t);
    $day_off = $d->format( 'Y-m-d' ). "<br />";
    
    echo $day_off;
    
    $query = "INSERT SQL";
    
}

?>

     

echo $ day_off 结果我得到:

     

2017-12-23
2017-12-24
2017-12-25
2017-12-26

     

而不是23,24,25,26。我需要得到以下结果:

     

2017年12月22日       2017年12月25日       2017年12月26日       2017年12月27日

  

22是输入日期,从25开始,因为23和24是周六和周日,需要排除周末。

     

我怎样才能达到这个效果?我一直在网上搜索,但不幸的是,我找不到我需要的东西。

@C。 Geek 回答是有效的,但我在这里有一个更复杂的问题,因为我的帐户没有资格提出更多问题所以我会在这里问。

所以这就是我到目前为止所尝试过的( @C.Geek 回答):

<?php

// loop for X days
for($i=0; $i < $duration; $i++){
    
    
    $d = strtotime("$start_date +$i weekdays");
    $t = strftime("%Y-%m-%d",$d);
    
    $day_off[] = $t;
    
    foreach($day_off as $dayoff) {
        
        $data_holiday = mysqli_fetch_array(mysqli_query($con, "SELECT * FROM `holiday_master_data` WHERE `date` = '$dayoff' "));
        
    }
    
    $holiday[] = $data_holiday['date'];
    $date = array_diff($day_off, $holiday);
    $dayoff_ = $holiday;
    
?>

开始日期:2017-12-29 持续时间:5天

来自 print_r($ day_off); 我收到了这样的结果:

  

数组([0] =&gt; 2017-12-29)数组([0] =&gt; 2017-12-29 [1] =&gt; 2018-01-01)数组([0] =&gt; 2017-12-29 [1] =&gt; 2018-01-01 [2] =&gt; 2018-01-02)

print_r($ holiday); 我得到了这个结果:

  

数组([0] =&gt;)数组([0] =&gt; [1] =&gt; 2018-01-01)数组([0] =&gt; [1] =&gt; 2018-01- 01 [2] =&gt;)数组([0] =&gt; [1] =&gt; 2018-01-01 [2] =&gt; [3] =&gt;)数组([0] =&gt; [1 ] =&gt; 2018-01-01 [2] =&gt; [3] =&gt; [4] =&gt;)

从数据库获取的国家日期是2018-01-01,有5个循环结果,我需要做的最终日期结果是1月29日,1月3日和1月5日,1月5日。

任何帮助将不胜感激。 感谢。

2 个答案:

答案 0 :(得分:0)

https://stackoverflow.com/a/4261223/6288442

  

如果你限制工作日使用字符串工作日。

echo date ( 'Y-m-j' , strtotime ( '3 weekdays' ) );
     

这应该会让你突然提前3个工作日,所以如果它是星期四,它会   添加额外的周末时间。

     

来源:http://www.php.net/manual/en/datetime.formats.relative.php

至于格式: http://php.net/manual/en/function.strftime.php

 string strftime ( string $format [, int $timestamp = time() ] )

如果您在编写代码时需要更多帮助,请在评论中说明

以下是我的完整答案:

$start_date = '2017-12-22';
$duration = 3;
$arr=null;
for($i=0; $i <= $duration; $i++){
    $d = strtotime("$start_date +$i weekdays");
    $t = strftime("%Y-%m-%d",$d);
    $arr[]=$t;
}

在循环之前获取假期,然后在循环中,在将其添加到$ arr之前检查日期是否为in_array。 e.g。

$start_date = '2017-12-22';  
$data_holiday = mysqli_fetch_array(mysqli_query($con, "SELECT * FROM `holiday_master_data` WHERE YEAR(`date`) BETWEEN YEAR('$start_date') AND YEAR('$start_date')+1 "));
$holidays = 
$duration = 3;
$arr=null;
for($i=0; $i <= $duration; $i++){
    $d = strtotime("$start_date +$i weekdays");
    $t = strftime("%Y-%m-%d",$d);
    if(!in_array($t,$data_holiday))
        $arr[]=$t;
}

答案 1 :(得分:0)

最后!!几个小时后我修好了一切。以下是我设法跳过的代码(太阳和星期一)以及从数据库中取出的Skip the Holiday(基于 @ C.Geek 答案+几个调整):

&#13;
&#13;
<?php

include 'conn.php';
$start_date = mysqli_real_escape_string($con, $_POST['start_date']);
$duration = mysqli_real_escape_string($con, $_POST['duration']);

// loop for X days
for($i=0; $i <= $duration; $i++){
    
    $d = strtotime("$start_date +$i weekdays");
    $t = explode(", ", strftime("%Y-%m-%d", $d));
    
    foreach ($t as $date) {
        
        $to_encode = array("date" => $date);
        $date_where = $to_encode['date'];
        
        $data_holiday = mysqli_fetch_array(mysqli_query($con, "SELECT `date` AS '0' FROM `holiday_master_data` WHERE DATE(`date`) BETWEEN DATE('$date_where') AND DATE('$date_where') + 1 GROUP BY `id` "));
        
        $encode_holiday = array("date" => $data_holiday[0]);
        
        break;
        
    }
    
    $holiday = array_unique($encode_holiday);
    $dayoff = array_diff($t, $holiday);
    
    foreach($dayoff as $date) {
        
        $query = mysqli_query($con, "INSERT INTO ");
    
        if ($query) {
            echo "<script>alert('Absence Saved'); window.location ='document.php' </script>";
        } else {
            echo "<script>alert('Gagal'); window.location ='document.php' </script>";
        }
    }
    
    
}

?>
&#13;
&#13;
&#13;

希望这可以帮助任何寻求同样问题的人。

干杯。