上周开始于:
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 '' . $dt->format('l') . " " . $dt->format('d M Y') . "\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
我更喜欢这种方法,但是问题是我无法弄清楚如何从数据库的这种方法中获取记录,所以我试图找到替代方法,我认为它要好得多,但不知道该怎么做
替代方法(第二种):
$now =date("d-m-Y");
select * from tasks where `c_date` = DATE_SUB('.$now.', INTERVAL 7 DAY )
什么也没得到,我确定我完全以错误的方式做.
任何帮助表示赞赏.
解决方法:
您可以使用类似的方法(警告不要检查错误):
$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;
标签:sql,php,date
来源: https://codeday.me/bug/20191210/2104532.html