2017-03-08 19 views
0

特定の日を出力する必要があるこの問題があり、月と年だけが増えます。これは、固定された日が15日であることを特徴とする請求本日(2017年12月8日YMD形式は)月の15日に満たない日ならば、出力はPHP日時に固定日と増分月/年を設定します。

| DATE  | 
| 2017-12-15 | 
| 2017-12-30 | 
| 2018-01-15 | 
| 2018-01-30 | 
| 2018-02-15 | 
| 2018-02-28 | 

でなければならないサンプル問題

で、 2月28日を除く他の日付は30日のみとなります。増分値は月と年だけです。 2月に関しては、月の最後の日(閏年が発生した場合は28または29)のみを取得します。

ご迷惑をおかけして申し訳ありませんが、誰かが助けてくれることを願っています。ありがとうございました。

+0

正確なルールを明確にする必要があります。いつも15日と30日になっていますか?月の15日と終わりの日ですが、30日を超えていませんか?それとも変わることができますか?おそらく16番と31番ですか?うまくいかないものを試しましたか? – deceze

+0

15日と30日のみ。 2月2日は28日しかないので、2月2日(28日)の最終日になります。私はいくつかのコードを試してきましたが、何も動作しません。 –

+0

あなたの出力の論理は何ですか?またあなたの問題は何ですか?あなたは、日付が月の15日か月の最終日かどうかをチェックする方法を知らない、または別の問題がありますか? –

答えて

0
for ($i = 0; $i < $whatever; $i++) { 
    $fifteenth = mktime(0, 0, 0, 12 + $i, 15, 2017 + floor($i/12)); 
    echo date('Y-m-d', $fifteenth), PHP_EOL; 
    echo date('Y-m-', $fifteenth), min(date('t', $fifteenth), 30), PHP_EOL; 
} 

ループ状態の$whateverは、何ヶ月先に印刷したいのですか?
mktimeコールの122017は、開始月と年です。

これは、オーバーフロー日付の計算を使用して(12 + 5 = 17 = 5月;それは、それがそうであることに注意してください)、月の15日のタイムスタンプを直接作成します明示的にサポートされている機能)。その後、date('t')を使用して月の最終日を取得し、単純なmin関数を使用して最大値を30に制限します。

関連する問題