2016-08-16 7 views
1

私はこの関数の魔女に日付の配列を返します。私は今から昨年まで7日おきにジャンプする必要があります。PHP DateInterval

$date[] = $lastDate = (new \DateTIme('NOW'))->format('Y-m-d'); 

for ($i = 1; $i < 54; ++$i) { // 54 -> number of weeks in a year 
    $date[] = $lastDate = date('Y-m-d', strtotime('-7 day', strtotime($lastDate))); 
} 

return array_reverse($date); 

これは機能しますが、私はうまくいく可能性があります。 を1年間の週数で使用しているため、私はそれを変更したいと思います。あまり良くありません。 (変更可能)

したがって、私はDateInterval PHPクラスを使いたいと思います。 私は去年の日付を持つことができます。

$lastYear = date('Y-m-d', strtotime('-1 year', strtotime($lastDate))); 

しかし、私はDateIntervalクラスを持つすべての私の日付と私の配列を持つことができるかわかりません。

誰かが私を助けることができますか?私は、日付の操作に非常に悪いです:(...ここ

は私が必要なものについての例の配列です:

["2015-07-06", "2015-07-13", "2015-07-20", "2015-07-27", "2015-08-03", "2015-08-10", "2015-08-17", "2015-08-24", "2015-08-31", "2015-09-07", "2015-09-14", "2015-09-21", "2015-09-28", "2015-10-05", "2015-10-12", "2015-10-19", "2015-10-26", "2015-11-02", "2015-11-09", "2015-11-16", "2015-11-23", "2015-11-30", "2015-12-07", "2015-12-14", "2015-12-21", "2015-12-28", "2016-01-04", "2016-01-11", "2016-01-18", "2016-01-25", "2016-02-01", "2016-02-08", "2016-02-15", "2016-02-22", "2016-02-29", "2016-03-07", "2016-03-14", "2016-03-21", "2016-03-28", "2016-04-04", "2016-04-11", "2016-04-18", "2016-04-25", "2016-05-02", "2016-05-09", "2016-05-16", "2016-05-23", "2016-05-30", "2016-06-06", "2016-06-13", "2016-06-20", "2016-06-27", "2016-07-04"] 
+0

あなたはダイナミックな週数をカウントしたいですか? –

+0

私はそれを行うための最良のソリューションを探しています。しかし、はい、私の目的は初めでした。しかし、より良いものがあれば私はそれを取るでしょう。 – Kevin

+0

可能な複製の[PHP - 先週の番号を年に取得](0120-998-501) –

答えて

2

PHPは、それが自身ですネイティブDateIntervalオブジェクト。ここにそれを使用する方法を簡単な例をのsa。

$oPeriodStart = new DateTime(); 
$oPeriodEnd = new DateTime('+12 months'); 

$oPeriod = new DatePeriod(
    $oPeriodStart, 
    DateInterval::createFromDateString('7 days'), 
    $oPeriodEnd 
); 

foreach ($oPeriod as $oInterval) { 
    var_dump($oInterval->format('Y-m-d)); 
} 

だから我々は何VE 'ここで行わ?Dの期間について開始日、終了日、間隔が必要です。ただあなた自身のためにそれをテストしてください。楽しむ。

+0

'DateTime'クラスを扱うときに' strtotime() 'を使うのはなぜですか? '新しいDateTime( '+ 12ヶ月')で何が問題ないのですか? –

+0

これはうまくいきませんでした。これまでは絶対に試してはいけません。グレートヒントGlavic!ありがとうございました。私は自分の投稿を編集します。 – Marcel

+1

'DateTime class'を使って' date() 'や' strtotime() '関数と混在させると、**間違ったことが起こっていることに注意してください**。 Personaly、私はこの機能を非難する:D –

0

はこれを試してみてください:

$timestamp = strtotime("last Sunday"); 
$sundays = array(); 
$last_year_timestamp = strtotime("-1 year ",$timestamp); 

while($timestamp >= $last_year_timestamp) { 
    if (date("w", $timestamp) == 0) { 
     $sundays[] = date("Y-m-d", $timestamp); 
     $timestamp -= 86400*7; 
     continue; 
    } 
    $timestamp -= 86400; 
} 
+0

ありがとうございます。しかし、私は今から数年前まで行く必要があります。 2015年の日付が必要です。私の英語のために申し訳ありません。私は私が望むものを説明することが難しい... – Kevin

+0

そして、この過去の日は私たちに知られていますか?たとえば、今日と昨年の2015年11月1日の間にすべての日曜日を検索しようとしていますか? –

+0

私は自分の投稿を更新しました。私はそれが昨年の同じ日になるまでループする必要があります – Kevin

関連する問題