如何获得两个日期之间的星期日

时间:2016-05-24 10:43:35

标签: php

我试试这个

<?php
    $startdate = '2016-07-15';
    $enddate = '2016-07-17';
    $sundays = [];
    $startweek=date("W",strtotime($startdate));
    $endweek=date("W",strtotime($enddate));
    $year=date("Y",strtotime($startdate));

    for($i=$startweek;$i<=$endweek;$i++) {
        $result=$this->getWeek($i,$year);
        if($result>$startdate && $result<$enddate) {
            $sundays[] = $result;
        }
    }
    print_r($sundays);

    public function getWeek($week, $year)
    {
       $dto = new \DateTime();
       $result = $dto->setISODate($year, $week, 0)->format('Y-m-d');
       return $result;
    }
?>

这个返回空白数组。但在两个日期之间2016-07-17是星期日。

我输出为2016-07-17

我引用此here 但是在这个链接中,返回输出为星期日没有日期。

4 个答案:

答案 0 :(得分:6)

尝试一下:

$startDate = new DateTime('2016-07-15');
$endDate = new DateTime('2016-07-17');

$sundays = array();

while ($startDate <= $endDate) {
    if ($startDate->format('w') == 0) {
        $sundays[] = $startDate->format('Y-m-d');
    }

    $startDate->modify('+1 day');
}

var_dump($sundays);

答案 1 :(得分:0)

function getDateForSpecificDayBetweenDates($startDate, $endDate, $weekdayNumber)
{
 $startDate = strtotime($startDate);
 $endDate = strtotime($endDate);

$dateArr = array();

do
{
    if(date("w", $startDate) != $weekdayNumber)
    {
        $startDate += (24 * 3600); // add 1 day
    }
} while(date("w", $startDate) != $weekdayNumber);


while($startDate <= $endDate)
{
    $dateArr[] = date('Y-m-d', $startDate);
    $startDate += (7 * 24 * 3600); // add 7 days
}

return($dateArr);
}
  $dateArr = getDateForSpecificDayBetweenDates('2010-01-01', '2010-12-31', 0);
  print "<pre>";
  print_r($dateArr);

试试这段代码..

答案 2 :(得分:0)

试试这个

$start = new DateTime($startDate);
        $end = new DateTime($endDate);

        $sundays = [];
        while ($start->getTimestamp() != $end->getTimestamp()) {
            if ($start->format('w') == 0) {
                $sundays[] = $start->format('Y-m-d');
            }
            $start->add('+1 DAY');
        }

答案 3 :(得分:0)

这将在两个日期之间返回所有星期日。

$startdate = '2016-05-1';
$enddate   = '2016-05-20';

function getSundays($start, $end) {
    $timestamp1 = strtotime($start);
    $timestamp2 = strtotime($end);
    $sundays    = array();
    $oneDay     = 60*60*24;

    for($i = $timestamp1; $i <= $timestamp2; $i += $oneDay) {
        $day = date('N', $i);

        // If sunday
        if($day == 7) {
            // Save sunday in format YYYY-MM-DD, if you need just timestamp
            // save only $i
            $sundays[] = date('Y-m-d', $i);

            // Since we know it is sunday, we can simply skip 
            // next 6 days so we get right to next sunday
            $i += 6 * $oneDay;
        }
    }

    return $sundays;
}


var_dump(getSundays($startdate, $enddate));