PHP中日期范围内的开始日期和结束日期为两周

时间:2013-02-05 09:48:50

标签: php date

我希望在PHP的日期范围内获取两周的开始日期和结束日期。

周开始=周日和周末=周六

ie)例如,如果日期范围是

  

$ start ='2013-01-01'和
   $ end ='2013-02-28'

必填结果

  

开始日期 - > 2013-01-01结束日期 - > 2013-01-12
  开始日期 - > 2013-01-13结束日期 - > 2013-01-26
  开始日期 - > 2013-01-27结束日期 - > 2013-02-09
  开始日期 - > 2013-02-10结束日期 - > 2013-02-23
  开始日期 - > 2013-02-24结束日期 - > 2013-02-28

代码

  <?php
$st = '2013-01-01';
$et ='2013-02-28';
$start_date = date('Y-m-d', strtotime($st));
$end_date = date('Y-m-d', strtotime($et));
$end_date1 = date('Y-m-d', strtotime($et. '+ 6 days'));

$weekfrom = array();
$weekto = array();

for($date = $start_date; $date <= $end_date1; $date = date('Y-m-d', strtotime($date. ' + 14 days')))
{

    $week =  date('W', strtotime($date));
    $year =  date('Y', strtotime($date));
    $from = date("Y-m-d", strtotime("{$year}-W{$week}+1")); //Returns the date of monday in week
    if($from < $start_date) $from = $start_date;
    $to = date("Y-m-d", strtotime("{$year}-W{$week}-6"));   //Returns the date of sunday in week
    if($to > $end_date)
     {
        $to = $end_date;       

     }
    if($from < $to)
    {
    array_push($weekfrom,$from);
    array_push($weekto,$to);
    }

}
$n = count($weekfrom);

for($i = 0;$i<$n;$i++)
{
  echo "Start Date-->".$weekfrom[$i];
  echo " End Date -->".$weekto[$i]."\n";
}


?>

当前结果

  

开始日期 - &gt; 2013-01-01结束日期 - &gt; 2013-01-05
  开始日期 - &gt; 2013-01-13结束日期 - &gt; 2013-01-19
  开始日期 - &gt; 2013-01-27结束日期 - &gt; 2013-02-02
  开始日期 - &gt; 2013-02-10结束日期 - &gt; 2013-02-16
  开始日期 - &gt; 2013-02-24结束日期 - &gt; 2013-02-28

DEMO

在当前结果中,开始日期是正确的。但问题是在结束日期之内。帮我找到问题

2 个答案:

答案 0 :(得分:2)

只需改为这个......

$to = date("Y-m-d", strtotime("{$year}-W{$week}-6 + 1 week"));

参见 Codepad

答案 1 :(得分:0)

第一天:

if is Sunday == true
 today
else
 strtotime('last sunday');

最后一天:

if is Saturday == true
 today
else
 strtotime('next saturday');