Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取两个日期范围内的所有日期,并基于选定的周_Php_Date - Fatal编程技术网

Php 获取两个日期范围内的所有日期,并基于选定的周

Php 获取两个日期范围内的所有日期,并基于选定的周,php,date,Php,Date,我需要输入两个日期,例如从2016-10-01到2016-11-01的日期范围,并生成该范围内的所有周六和周日日期 例如,本申报表: 2016-10-1 2016-10-2 2016-10-8 2016-10-9 2016-10-15 2016-10-16 2016-10-22 2016-10-23 2016-10-29 2016-10-30 注意:不仅仅是周末。例如,我有一个和数组,如下所示: array('monday','saturday','sunday') 我正在

我需要输入两个日期,例如从2016-10-01到2016-11-01的日期范围,并生成该范围内的所有周六和周日日期

例如,本申报表:

2016-10-1

2016-10-2

2016-10-8

2016-10-9

2016-10-15

2016-10-16

2016-10-22

2016-10-23

2016-10-29

2016-10-30
注意:不仅仅是周末。例如,我有一个和数组,如下所示:

array('monday','saturday','sunday')
我正在尝试此代码,但无法正常工作:

$event_da = '2016-10-01';
$event_a = '2016-11-01';

$weekdays = array('saturday','sunday');

for ( $i = $event_da; $i <= $event_a; $i = $i + 86400 ) {

    $thisDate = date( 'Y-m-d', $i );

    $getDate = date('l', strtotime($thisDate));

    if ( in_array( $getDate, $weekdays) ) {

          echo $thisDate;

    }
}
$event_da='2016-10-01';
$event_a='2016-11-01';
$weekdays=数组(“星期六”、“星期日”);
对于($i=$event_da;$i
函数createDateRangeArray($strDateFrom,$strDateTo)
{
//获取格式为YYYY-MM-DD的两个日期并创建
//起始日期和结束日期之间的包含日期数组。
//可以在这里测试日期的有效性,但我已经在做了
//在主剧本里
$aryRange=array();
$iDateFrom=mktime(1,0,0,substr($strDateFrom,5,2),substr($strDateFrom,8,2),substr($strDateFrom,0,4));
$iDateTo=mktime(1,0,0,substr($strDateTo,5,2),substr($strDateTo,8,2),substr($strDateTo,0,4));
如果($iDateTo>=$iDateFrom)
{
数组推送($aryRange,date($Y-m-d',$iDateFrom));//第一个条目
而($iDateFrom
$start=strottime('2016-05-01 00:00');
$end=strottime('2016-07-10 00:00');
//在时间戳之间循环,一次24小时

对于($i=$start;$i,如果您的PHP>=5.1:

 while (strtotime($date) <= strtotime($end_date)) 
    {
        function isWeekend($date) {
            return (date('N', strtotime($date)) >= 6);
           $date = date ("Y-m-d", strtotime("+1 day", strtotime($date)));
          }

    }
?>
while(strotime($date)=6);
$date=日期(“Y-m-d”,标准时间(+1天),标准时间($date));
}
}
?>
否则:

while (strtotime($date) <= strtotime($end_date)) 
{
    function isWeekend($date) {
        $weekDay = date('w', strtotime($date));
        $date = date ("Y-m-d", strtotime("+1 day", strtotime($date)));
        return ($weekDay == 0 || $weekDay == 6);
     }
}

while(strotime($date)这是一个非常灵活的代码,您可以输入任意两个日期和另一个数组来指定要筛选的日期

function isWeekend($start_date, $end_date, $expected_days) {
    $start_timestamp = strtotime($start_date);
    $end_timestamp   = strtotime($end_date);
    $dates = array();
    while ($start_timestamp <= $end_timestamp) {
        if (in_array(date('l', $start_timestamp), $expected_days)) {
           $dates[] = date('Y-m-d', $start_timestamp);
        }
        $start_timestamp = strtotime('+1 day', $start_timestamp);
    }
    return $dates;
  }

 $start_date        =  '2016-10-01';
 $end_date          =  '2016-11-01';
 $expected_days     =  array('Monday','Saturday','Sunday');
 $weekend_dates     =  isWeekend($start_date, $end_date, $expected_days);
试试这个:

$days = array('Monday', 'Saturday', 'Sunday');

for($i = strtotime('2016-10-01'); $i <= strtotime('2016-11-01'); $i = strtotime('+1 day', $i)) {
  if (in_array(date('l', $i), $days)) {
    echo date('l Y-m-d', $i);
  }
}
$days=array('星期一'、'星期六'、'星期日');

对于($i=strotime('2016-10-01');$i以下代码只是Jan Walczak的编辑版本

$start = strtotime( '2016-05-01 00:00' );
$end = strtotime( '2016-07-10 00:00' );
for ( $i = $start; $i <= $end; $i = $i + 86400 ) {
    $thisDate = date( 'Y-m-d', $i );
    $getDate = date('l', strtotime($thisDate));
    //echo $getDate . "<br>";
    if ($getDate == 'Saturday' || $getDate == 'Sunday') 
    {
      echo $thisDate . "<br>";
    }
}
$start=strottime('2016-05-01 00:00');
$end=strottime('2016-07-10 00:00');

对于($i=$start;$i您到目前为止有没有尝试过任何东西?此答案将帮助您->您好,StackOverflow不是一项“我的工作”服务。请尝试一些东西,然后在遇到问题时问一个问题。@Blackus查看我的更新答案,在《现在符合您的标准》中?当然,它会更好。我邀请您查看和,以了解主题是什么,以及如何进行提问。不要从另一个SO答案复制整个答案。如果您认为这是一个重复的标志/vtc作为重复。该答案是从另一个答案复制的。因此循环继续。但我了解了关于重复的内容,以后将继续。感谢@Object Manipulator您的函数工作,最后代码是:
function rangeDate($start_date,$end_date,$expected_days){$start_timestamp=strottime($start_date);$end_timestamp=strottime($end_date);$dates=array();while($start_timestamp)
 Array
(
  [0] => 2016-10-01
  [1] => 2016-10-02
  [2] => 2016-10-03
  [3] => 2016-10-08
  [4] => 2016-10-09
  [5] => 2016-10-10
  [6] => 2016-10-15
  [7] => 2016-10-16
  [8] => 2016-10-17
  [9] => 2016-10-22
  [10] => 2016-10-23
  [11] => 2016-10-24
  [12] => 2016-10-29
  [13] => 2016-10-30
  [14] => 2016-10-31
)
$days = array('Monday', 'Saturday', 'Sunday');

for($i = strtotime('2016-10-01'); $i <= strtotime('2016-11-01'); $i = strtotime('+1 day', $i)) {
  if (in_array(date('l', $i), $days)) {
    echo date('l Y-m-d', $i);
  }
}
$start = strtotime( '2016-05-01 00:00' );
$end = strtotime( '2016-07-10 00:00' );
for ( $i = $start; $i <= $end; $i = $i + 86400 ) {
    $thisDate = date( 'Y-m-d', $i );
    $getDate = date('l', strtotime($thisDate));
    //echo $getDate . "<br>";
    if ($getDate == 'Saturday' || $getDate == 'Sunday') 
    {
      echo $thisDate . "<br>";
    }
}