PHP打印日期没有星期天

时间:2017-04-20 12:48:35

标签: php

我有这个输入字段的表单

<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">

我输入第一个日期和第二个日期,长度i确定重复次数

比我点击下一个,我有没有星期天的所有日子

示例如果我在长度和日期时间为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)));
        }  
    }
?>

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

4 个答案:

答案 0 :(得分:1)

使用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为数字的星期几。

答案 1 :(得分: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>";
    }

答案 2 :(得分:1)

这是你的程序

$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会有你预期的日期。

答案 3 :(得分:0)

看起来你错误地拼写了变量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";
}
?>