0

2 つの日付の間の週番号を表示するプログラム コードを作成しています。私はまた、週番号の間に日付を表​​示したいと考えています。スタックオーバーフローのサンプルコードに従って、次のコードを作成しました。( here && here )

function getStartAndEndDate($week, $year)
{
$time = strtotime("1 January $year", time());
$day = date('w', $time);
$time += ((7*$week)+1-$day)*24*3600;
$return[0] = date('dMY', $time);
$time += 6*24*3600;
$return[1] = date('dMY', $time);
return $return;
}
$startTime = strtotime('2013-04-01');
$endTime = strtotime('2013-05-03');

$weeks = array();

while ($startTime < $endTime) 
{
$weeks[] = date('W', $startTime);
$startTime += strtotime('+1 week', 0);
}
echo count($weeks)."<br/>";
$year="2013";
foreach ($weeks as $key => $w)
{
echo "Week Number:".$w."--";
$return=getStartAndEndDate($w,$year);
$r0=$return[0];
$r1=$return[1];
echo "Start-".$r0."-End-".$r1."<br/>";
}

しかし、出力は間違っています。出力は次のとおりです。

5

週番号: 14--開始-2013 年 4 月 7 日-終了-2013 年 4 月 13 日

週番号: 14--開始-2013 年 4 月 7 日-終了-2013 年 4 月 13 日

週番号: 15 -- 開始 - 2013 年 4 月 14 日 - 終了 - 2013 年 4 月 20 日

週番号: 16--Start-21Apr2013-End-27Apr2013

週番号: 17--Start-28Apr2013-End-04May2013

第 14 週は 2013 年 3 月 31 日から 2013 年 4 月 6 日までです。問題が何であるかを理解できませんでした。どんな助けでも感謝しなければなりません!

4

2 に答える 2

0

日付で確認しようとしましたか

$startTime = strtotime('2012-12-30');
$endTime = strtotime('2013-05-03');

実際の14週目は

Week Number:14--Start-08Apr2013-End-14Apr2013

いいえ

14th week starts from 31Mar2013 to 6Apr2013

PHP の開始週は月曜日 --> 日曜日です。したがって、2012-12-30どちらが日曜日かを計算すると、

Week Number:01--Start-07Jan2013-End-13Jan2013
Week Number:02--Start-14Jan2013-End-20Jan2013
Week Number:03--Start-21Jan2013-End-27Jan2013
Week Number:04--Start-28Jan2013-End-03Feb2013
Week Number:05--Start-04Feb2013-End-10Feb2013
Week Number:06--Start-11Feb2013-End-17Feb2013
Week Number:07--Start-18Feb2013-End-24Feb2013
Week Number:08--Start-25Feb2013-End-03Mar2013
Week Number:09--Start-04Mar2013-End-10Mar2013
Week Number:10--Start-11Mar2013-End-17Mar2013
Week Number:11--Start-18Mar2013-End-24Mar2013
Week Number:12--Start-25Mar2013-End-31Mar2013
Week Number:13--Start-01Apr2013-End-07Apr2013
Week Number:14--Start-08Apr2013-End-14Apr2013
于 2013-05-24T03:44:42.753 に答える
0

私はそれを理解しました:

function week_start_date($wk_num, $yr, $first = 1, $format = 'F d, Y')
{
    $wk_ts  = strtotime('+' . $wk_num . ' weeks', strtotime($yr . '0101'));
    $mon_ts = strtotime('-' . date('w', $wk_ts) + $first . ' days', $wk_ts);
    return date($format, $mon_ts);
}


$year="2013";
$startDate="2012-12-30";
$endDate="2013-05-03";

$p = new DatePeriod(
        new DateTime($startDate),
        new DateInterval('P1W'),
        new DateTime($endDate)
);

foreach ($p as $k=>$w) {
    echo $k.":".$w->format('W')."<br/>";
    $w=$w->format('W');
    $sStartDate = week_start_date($w, $year);
    $sEndDate   = date('F d, Y', strtotime('+6 days', strtotime($sStartDate)));
    echo $sStartDate."&&".$sEndDate."<br/>";
}
于 2013-05-24T04:35:52.603 に答える