从PHP中的当前日期获取从周一至周日开始的上周记录

时间:2019-05-24 14:19:35

标签: php sql date

上周开始于:

2019年5月13日(星期一)至2019年5月19日(星期日)

本周开始于:

2019年5月20日(星期一)至2019年5月26日(星期日)

在数据库中,我有这样的记录:

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  

我更喜欢这样做,但是问题是我无法弄清楚如何从DB的这种方法中获取记录,所以我试图找到Alternative,我认为它要好得多,但不知道该怎么做< / p>

替代方法(第二种):

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

我什么都没得到,我确定我做错了什么。 感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用类似的方法(警告不要检查错误):

$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;