Получите номера недель с датами начала и окончания между двумя датами в переполнении стека

Я хотел бы получить номера недели с начальной и конечной датами между двумя датами в 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 (), но не знаю, как мне получить желаемый результат.

0

Решение

Еще одна альтернатива, если использовать DateTime класс с ->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
}

Вот образец скрипки

Sidenote: Если вы хотите узнать больше или получить более подробную информацию о том, что вы можете использовать в относительные даты, вот запись в документации:

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

1

Другие решения

Используйте функцию 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>';
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

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector