Получение записей прошлой недели с понедельника по воскресенье с текущей даты в php - PullRequest
3 голосов
/ 24 мая 2019

Прошлая неделя начинается с:

13 мая 2019 года (понедельник) до 19 мая 2019 года (воскресенье)

Эта неделя начинается с:

с 20 мая 2019 года (с понедельника по 26 мая 2019 года (воскресенье)

В базе данных у меня есть такие записи:

task_id   c_date
1         2019-05-14
2         2019-05-16 
3         2019-05-13
4         2019-05-17
5         2019-05-19
6         2019-05-21
7         2019-05-23
8         2019-05-24
9         2019-05-24

ожидаемый вывод будетбыть похожим на 1,2,3,4,5 записей прошлой недели

то, что я пробовал: (подход 1-й)

       $dt = new DateTime;
       $dt->setISODate($dt->format('o'), $dt->format('W') - 1);
        $year = $dt->format('o');
        $week = $dt->format('W');


          $this_week = array();

           do {

              echo '<span>' . $dt->format('l') . " " . $dt->format('d M Y') . "</span></br>\n";
            // $date_sheet = $dt->format('Y-m-d'); 
            // array_push($this_week, $date_sheet);  

      $dt->modify('+1 day');


     } while ($week == $dt->format('W'));

Вывод:

Monday 13 May 2019
Tuesday 14 May 2019
Wednesday 15 May 2019
Thursday 16 May 2019
Friday 17 May 2019
Saturday 18 May 2019
Sunday 19 May 2019  

Я предпочитаю это, но проблема в том, что я не могу понять, как извлечь запись из этого подхода из БД, поэтому я пытался найти Альтернативу, и я думал, что это намного лучше, ноне знаю, как это сделать

Альтернативный подход (2-й):

$now =date("d-m-Y");
select * from tasks where `c_date` = DATE_SUB('.$now.', INTERVAL 7 DAY ) 

Ничего не понимаю, я уверен, что делаю полностью внеправильный путь.Любая помощь приветствуется.

1 Ответ

2 голосов
/ 24 мая 2019

Вы можете использовать что-то вроде (предупреждение, что нет ошибок):

$dtFrom = new DateTime; // get current date
$dtTo = new DateTime;
// format for previous week (no previous year check)
$dtFrom->setISODate($dtFrom->format('o'), $dtFrom->format('W') - 1);
// do the same for end date range
$dtTo->setISODate($dtTo->format('o'), $dtTo->format('W') );
// subtract 1 day
$dtTo->sub(new DateInterval('P1D') );
// convert to iso date for database use
$dFrom = $dtFrom->format('y-m-d');
$dTo   = $dtTo->format('y-m-d');

$ dFrom и $ dTo - это форматы даты, которые могут использоваться в запросе

SELECT * FROM mytable WHERE DateRange between $dFrom AND $dTo;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...