3

私は学校のプロジェクトを行っています。そこでは、次のような日付の文字列を出力することになっています:

第 36 週: 2013 年 4 月 9 日 - 2013 年 9 月 10 日

第 37 週: 11.9.2013 - 17.9.2013 など

編集:スペースを節約するために古いコードを削除しました

これは週単位でうまく機能しますが、次のように別の日も印刷されるはずです。

第 36 週: 2013 年 4 月 9 日 - 2013 年 9 月 10 日

第 37 週: 11.9.2013 - 17.9.2013

2013.9.18

191.10.2013

文字列が無限のif-elseシナリオなしで1週間あるかどうかを確認する方法はありますか?

編集

コードを少し編集しました。

$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 週: 04.09.2013、05.09.2013、07.09.2013、08.09.2013、

第 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 週: 16.09.2013、17.09.2013、19.09.2013、21.09.2013、22.09.2013、

第 2 週: 10.01.2013、

第 3 週: 20.01.2113、

私の問題は、同じ週にある日を次のようにグループ化する必要があることです。

第 37 週: 2013 年 9 月 9 日 - 2013 年 9 月 15 日

これに関するアイデアはありますか?最初に年を取得し、次に週を取得し、次に日付の日 (このための新しい配列を作成) を取得し、その日を前の日付と比較できることはわかっていますが、それは非常に難しく、あまり論理的ではないように思えます。コメントをありがとう、それは本当に私に考える新しいアイデアを与えてくれました。

4

1 に答える 1

1

楽しみ !これは、あなたが自分でしなければならない休息の始まりです。

$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";
}
于 2013-09-20T12:15:57.440 に答える