0

開始日と終了日を指定して、年と週の値を含む配列を生成する必要があります。例えば:

開始日: 2013-01-01

終了日: 2013-02-23

生成された配列:

配列 ( [0] => 配列 ( [週] => 01 [年] => 2013 )
[1] => 配列 ([週] => 02 [年] => 2013)
[2] => 配列 ([週] => 03 [年] => 2013)
[3] => 配列 ([週] => 04 [年] => 2013)
[4] => 配列 ([週] => 05 [年] => 2013)
[5] => 配列 ([週] => 06 [年] => 2013)
[6] => 配列 ([週] => 07 [年] => 2013)
[7] => 配列 ([週] => 08 [年] => 2013 ) )

これを生成するために使用しているコードは次のとおりです。

public static function getYearWeekRange($startdate, $enddate) {
    $array = array();
    $starttime = strtotime($startdate);
    $endtime = strtotime($enddate);
    while ($starttime <= $endtime) {
        $year = date('Y', $starttime);
        $week = date('W', $starttime);
        $array[] = array('week' => $week, 'year' => $year);
        $starttime = strtotime('+1 week', $starttime);
    }
    return $array;
}

私の問題は、特定の日付範囲を生成すると、2013 年の開始時に正しい年の値が得られないことです。例えば:

開始日: 2012-01-01

終了日: 2013-02-23

この場合、年 = 2013 および週 = 01 のサブ配列が必要ですが、実際には年値が 2012 に等しくなります。

たとえば、開始日を 2013 年 1 月 5 日に変更しても問題ありません。

私の年と週の値が常に正しいことを保証するソリューションを誰かが提供できますか?

4

1 に答える 1

0

以下を使用して問題を解決できました。

public static function getWeekRange($startdate, $enddate) {
    $array = array();
    $p = new DatePeriod(
        new DateTime($startdate), 
        new DateInterval('P1W'), 
        new DateTime($enddate)
    );
    foreach ($p as $w) {
        $array[] = array('year' => $w->format('o'), 'week' => $w->format('W'));
    }
    return $array;
}
于 2013-02-21T16:34:01.200 に答える