PHP如何检查日期字符串是否包含周数

3
我正在做一个学校项目,需要打印出一串日期字符串,如下所示:
第36周: 2013年4月9日 - 2013年9月10日
第37周: 2013年9月11日 - 2013年9月17日等等
编辑:为了节省空间,已删除旧代码
这对于星期来说非常好用,但现在需要单独打印每天的日期,格式如下:
第36周: 2013年4月9日 - 2013年9月10日
第37周: 2013年9月11日 - 2013年9月17日
2013年9月18日
2013年10月1日
是否有一种方法可以检查字符串是否具有整个星期,而不需要无尽的if-else条件?
编辑:我稍微修改了我的代码:
$dates = "04.09.2013,05.09.2013,24.12.2015,07.09.2013,08.09.2013,09.09.2013,10.09.2013,11.09.2013,12.09.2013,13.09.2013,14.09.2013,15.09.2013,16.09.2013,17.09.2013,10.01.2013,19.09.2013,20.01.2113,21.09.2013,22.09.2013,23.09.2013,24.09.2013,25.09.2013,26.09.2013,27.09.2013,28.09.2013,29.09.2011,30.09.2013,01.10.2013";


fixDates($dates);

function fixDates($dates) {
$datesArray = explode(',', $dates);
$week_dates = array();
$weeks = array();
$date = array();
$temp_array = array();
$pvmArray[] = array();
$i = 0;

foreach($datesArray as $date) {

    $date = explode(".", $date);
    $date  = mktime(0, 0, 0, $date[1], $date[0], $date[2]);
    $week  = (int)date('W', $date);
    $year  = (int)date('Y', $date);
    $day  = (int)date('w', $date);
    $date = date('d.m.Y', $date);

    $pvmArray[$i]['week'] = $week;
    $pvmArray[$i]['date'] = $date;
    $pvmArray[$i]['year'] = $year;
    $pvmArray[$i]['day'] = $day;
    $i++;
}


foreach ($pvmArray as &$v) {

   if (!isset($temp_array[$v["week"]]))
   $temp_array[$v["week"]] =& $v;

}

$weeks = array_values($temp_array);

foreach ($weeks as $pvm) {
    $week = $pvm["week"];
    $year = $pvm["year"];

    findWeekDays($week, $pvmArray);
}
}

function findWeekDays($week, $pvmArray) {

echo "<br><b>Viikko " . $week. ": </b><br>";
foreach ($pvmArray as $pvm) {
    $weeks = $pvm["week"];
    $year = $pvm["year"];
    $date = $pvm["date"];
    $day = $pvm["day"];

    if ($weeks == $week) {

        echo $date. ", ";

    }
}

}

现在我可以得到这样的输出:
第36周: 2013年9月4日,2013年9月5日,2013年9月7日,2013年9月8日,
第52周: 2015年12月24日,
第37周: 2013年9月9日,2013年9月10日,2013年9月11日,2013年9月12日,2013年9月13日,2013年9月14日,2013年9月15日,
第38周: 2013年9月16日,2013年9月17日,2013年9月19日,2013年9月21日,2013年9月22日,
第2周: 2013年1月10日,
第3周: 2113年1月20日,
我的问题是,我仍然需要将同一周内的日期分组,如下所示
第37周: 2013年9月9日至2013年9月15日
对此有什么想法吗?我知道可以先获取年份、周数和日期的天数(为此创建一个新数组),然后将日期与前一个日期进行比较,但这似乎相当困难且不太合理。感谢您的评论,它确实给了我新的思路。

我不明白你想用这些天做什么... 你能再解释一下吗?可以给一些例子吗? - Dusan Plavak
1
是的,请解释得更详细一些。我能看出你有一个具有挑战性的问题 :) - Oliver M Grech
你可以使用 DateTime() 对象。一个类似 $array[week][day1] 的数组可以帮助你计数,你可以使用 $date->format('W') 来检查周数和 $date->format('w') 来检查 DateTime 对象的星期几。这将允许你只查看最大元素并获取键或日期,然后比较日期或星期几。 - thepratt
我稍微编辑了一下代码,感谢您的评论。尝试了DateTime对象,它们很棒,但我就是无法弄清楚如何比较一个日期是否在某个星期。 - user1791218
1个回答

1

Enjoy ! This is begin rest you have to do self.

$weeks = array();

foreach($dates as $date)
    $weeks[date('W', strtotime($date))][] = $date;

foreach ($weeks as $week => $days)
{   
    if (! sizeof($days))
        continue;

    echo 'Week '.$week.': '.implode(', ',$days)."\n";
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接