拆分数周到几周?

时间:2015-06-06 17:52:45

标签: php arrays date

我从包含日期字段的数据库返回一个数组。我希望将数组分成几个星期,例如“本周”,“下周”。

我在网上找到的很多例子都与今天的日期有关,这不是我想要的。

今天是2015年5月6日,所以这个星期从2015年5月1日开始,到2015年5月5日结束。我想将这些日期之间的所有条目整理到自己的数组中。下周将于2015年5月8日开始,到2015年5月14日结束,我想将所有日期之间的日期整理成一个单独的数组。

2 个答案:

答案 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