上周开始于:
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 )
我什么都没得到,我确定我做错了什么。 感谢您的帮助。
答案 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;