我从包含日期字段的数据库返回一个数组。我希望将数组分成几个星期,例如“本周”,“下周”。
我在网上找到的很多例子都与今天的日期有关,这不是我想要的。
今天是2015年5月6日,所以这个星期从2015年5月1日开始,到2015年5月5日结束。我想将这些日期之间的所有条目整理到自己的数组中。下周将于2015年5月8日开始,到2015年5月14日结束,我想将所有日期之间的日期整理成一个单独的数组。
答案 0 :(得分:2)
如果您要将结果集分为三类 - 本周,下周和即将推出 - 您只需要知道的是下周开始和后一周开始。然后,您可以迭代结果集,进行相应的比较和分组。
从您上面的评论来看,您将在周一开始一周,所以:
int T;
char newline;
scanf("%d%c",&T, &newline);
您现在拥有ISO8601格式的日期时间字符串,用于下周一和周一。所以,给定一个这样的结果集:
$dateTime = new DateTime('next monday');
$weekStartNext = $dateTime->format('Y-m-d H:i:s');
$weekStartAfter = $dateTime->add(new DateInterval('P7D'))->format('Y-m-d H:i:s');
您可以在行日期进行简单的字符串比较,如下所示:
$rows = [
[
'name' => 'Sunday 7th June',
'start_date' => '2015-06-07 00:00:00',
],
[
'name' => 'Monday 8th June',
'start_date' => '2015-06-08 00:00:00',
],
[
'name' => 'Friday 12th June',
'start_date' => '2015-06-12 00:00:00',
],
[
'name' => 'Sunday 14th June',
'start_date' => '2015-06-14 00:00:00',
],
[
'name' => 'Monday 15th June',
'start_date' => '2015-06-15 00:00:00',
],
[
'name' => 'Sunday 21st June',
'start_date' => '2015-06-21 00:00:00',
],
[
'name' => 'Tuesday 30th June',
'start_date' => '2015-06-30 00:00:00',
],
[
'name' => 'Wednesday 1st July',
'start_date' => '2015-07-01 00:00:00',
],
];
这会产生:
$sorted = [];
foreach ($rows as $row) {
$startDate = $row['start_date'];
if ($startDate < $weekStartNext) {
$sorted['This week'][] = $row;
} elseif ($startDate >= $weekStartNext && $startDate < $weekStartAfter) {
$sorted['Next week'][] = $row;
} else {
$sorted['Upcoming'][] = $row;
}
}
print_r($sorted);
希望这会有所帮助:)
答案 1 :(得分:1)
这是检测给定的unix日期$date
是否在本周内的起点:
if (($date >= strtotime('monday this week')) and ($date <= strtotime('sunday this week'))) {
// $date is within this week
}
相关文档:strtotime