2

タイムテーブルをページングし、毎週日付を進め、新しい日付に関連する詳細を表示するページネーション機能があります。

いくつかの新しいデータをテストしているときに、ページングの問題が発生しました。つまり、2012 年 10 月 22 日を過ぎたページではありません。

コードをデバッグすると、2012 年 10 月 22 日を表す日付スタンプを 7 日間インクリメントすると、(strftime を介して) 2012 年 10 月 28 日の日付が返されるという問題の原因が最終的にわかりました。 2012 年 10 月。このエラーは、実質的に連続ループを引き起こします。これは、%W (毎週のページネーションを駆動する) が 2012 年 10 月 22 日の場合は 43、2012 年 10 月 28 日の場合は 43 であり、もちろん 2012 年 10 月 29 日の場合は 44 になるはずです。

この問題を特定して再現するための簡単なテストでは、次を使用しました。

/*
 * test %W
 */

$time_Stamp_1 = mktime(0,0,0,10,22,2012);
echo "date : " . strftime("%d/%m/%Y", $time_Stamp_1);
echo "W for first time stamp " . $time_Stamp_1 . " is " . strftime("%W", $time_Stamp_1); 

$time_Stamp_1a = $time_Stamp_1 += (60 * 60 * 24 * 7);
echo "new date : " . strftime("%d/%m/%Y", $time_Stamp_1a);
echo "W for new date time stamp: " . strftime("%W", $time_Stamp_1a);

$time_Stamp_2 = mktime(0,0,0,10,29,2012);
echo "W for second time stamp: " . strftime("%W", $time_Stamp_2);

ページネーションは、私がテストした他のすべての週の間でうまく移動し、明らかにこの増分/減分を適切に使用します.

うまくいけば、明らかな何かが欠けています。何かご意見は?

4

3 に答える 3

1

PHP DateTimeクラスは、次の方法です。-

$inFormat = 'd/m/Y h:i';
$outFormat = 'd/m/Y';
$date = DateTime::createFromFormat($inFormat, '22/10/2012 00:00');
$interval = new DateInterval('P7D');
for($i = 0; $i < 10; $i++){
    $date->add($interval);
    var_dump($date->format($outFormat) . " is in week " . $date->format('W'));week');
}

次の出力が得られます:-

string '29/10/2012 is in week 44' (length=24)
string '05/11/2012 is in week 45' (length=24)
string '12/11/2012 is in week 46' (length=24)
string '19/11/2012 is in week 47' (length=24)
string '26/11/2012 is in week 48' (length=24)
string '03/12/2012 is in week 49' (length=24)
string '10/12/2012 is in week 50' (length=24)
string '17/12/2012 is in week 51' (length=24)
string '24/12/2012 is in week 52' (length=24)
string '31/12/2012 is in week 01' (length=24)

カレンダーを一目見ただけで正しいことがわかります。

有効なフォーマット文字列については、こちらを参照してくださいhttp://us.php.net/manual/en/datetime.createfromformat.phpDateIntervalクラス
も参照してください

DateTime :: format()の有効な出力形式については、こちらを参照してくださいhttp://us.php.net/manual/en/function.date.php

于 2012-09-20T11:32:54.650 に答える
1

または、まだ使用することをお勧めしますDateTime

 // Create the DateTime object
 $date = new DateTime('2012-22-10');
 echo $date->format('d/m/Y');

 // Add one week
 $date->modify('+1 week');
 echo $date->format('d/m/Y');
于 2012-09-20T11:30:11.223 に答える
0

時間の計算にstrtotime()を使用してみてください-たとえば、次の週の使用を取得するには:

$time_Stamp_1a = strtotime("+1 week", $time_Stamp_1);
于 2012-09-20T11:08:51.320 に答える