在php中获取两个日期之间的开始日期和结束日期的周数

时间:2018-06-12 07:21:09

标签: php date date-difference

我想在php中获取两个日期之间的开始日期和结束日期的周数。工作日是周一至周六。

例如:

$date1='2018-03-21';
$date2='2018-05-14';

我希望输出类似于

Week no    Start Date    End Date
Week1      2018-03-21    2018-03-24
Week2      2018-03-26    2018-03-31

等等。

我应该如何处理这件事呢?

我正在尝试使用strtotime()函数但不知道如何获得所需的输出。

3 个答案:

答案 0 :(得分:1)

另一种方法是使用->modify类和$i = 1; // week number starts at 1 $date1 = new DateTime('2018-03-21'); $date2 = new DateTime('2018-05-14'); while (true) { echo "Week {$i}\n"; echo $date1->format('Y-m-d'), ' - '; $date1->modify('next saturday'); if ($date1 >= $date2) { echo $date2->format('Y-m-d'); break; // stop the loop, reached the end date, echo the last date, or whatever you want } echo $date1->format('Y-m-d') , "\n"; $date1->modify('next monday'); // start again on monday $i++; // increment for next week } 方法。它可以帮助您通过相对日期调整日期。

以下是这个想法:(标记取决于你,或者把它放在一个数组中,无论你喜欢哪个)

<my-element>

Here's a sample fiddle

旁注:如果您想了解更多信息或深入了解相关日期可以使用的信息,请参阅文档条目:

http://php.net/manual/en/datetime.formats.relative.php

答案 1 :(得分:0)

将date()函数与“W”一起使用。它将返回星期一开始的周数。

$array = array(

  '2018-03-21',
  '2018-05-14',
  '2018-01-20',
  '2018-06-05',
  '2017-11-15'

);

echo
'<table>
  <tr>
    <td>Week #</td>
    <td>Start Date</td>
    <td>End Date</td>
  </tr>';

  foreach($array as $date){

    echo
    '<tr>' .
      '<td>' . date('W', strtotime($date)) . '</td>' .
      '<td>' . '' . '</td>' .
      '<td>' . '' . '</td>' .
    '</tr>';

  }

echo
'</table>';

答案 2 :(得分:0)

这是循环Unix时间的方法。

$date=strtotime('2018-03-21');
$date2=strtotime('2018-05-14' . '23:39');

While($date <= $date2){
    $new[date("W", $date)]['start'] = date("Y-m-d", $date);
    $new[date("W", $date)]['end'] = date("Y-m-d", $date + (6-date("N", $date))*86400); // next saturday
    $date = $date + (8-date("N", $date))*86400; // set date to next Monday.
}
$w =array_keys($new);

$new[end($w)]["end"] = date("Y-m-d", $date2); // edit last item to end date
Var_dump($new);

https://3v4l.org/nMk0X