0

既存の日付に日数を追加する方法を尋ねる投稿が他にも無数にあることは知っていますが、それを機能させることができません。

ここでは、$numPayments の反復ごとに、各日付に 30 日を追加しようとしています。

$numPayments = 5;
$nextPaymentDate = date('m-j-Y g:i a', strtotime("+30 days"));
for($i = 0; $i <= $numPayments; $i++) {

    echo $nextPaymentDate . "\r\r";
    $nextPaymentDate = date('m-j-Y g:i a', strtotime($nextPaymentDate . " + 30 days"));              
}

何らかの理由で、同じ日付をもう一度出力するだけです。

09-8-2013 3:10 pm

09-8-2013 3:10 pm

09-8-2013 3:10 pm

09-8-2013 3:10 pm

09-8-2013 3:10 pm

09-8-2013 3:10 pm
4

2 に答える 2

4
$numPayments = 5;

$nextPaymentDate = new DateTime;

$interval = new DateInterval('P30D');

for ($i = 0; $i <= $numPayments; $i++) {
    $nextPaymentDate->add($interval);
    echo $nextPaymentDate->format('m-j-Y g:i a') . "\r\r";
}

この初期日付の作成方法とループのこの方法の利点は、すべて (支払い回数、追加する日数、計算された日付の出力形式) がコードに 1 回だけ記述されることです。将来、それらのいずれかを変更する必要がある場合は、1 か所だけ変更する必要があります。

于 2013-08-09T22:20:19.093 に答える
0

私のコメントについてはコンセンサスがあるようですので、ここに正式に投稿します。

PHP は、ドキュメントに示されているように、一般的に最も一般的な日付と時刻のさまざまな形式を受け入れます。MM/DD/YYYYアメリカ人は日付をフォーマットで書く傾向があります。他の場所では、通常、日付が書かれてDD/MM/YYYYいます。PHP は、さまざまなセパレーターを使用していますが、他の多くのフォーマットの中でも両方のフォーマットを採用しています。またはのいずれかを使用できMM/DD/YYYYますDD-MM-YYYY。ただし、使用しようとしていますMM-DD-YYYY。受け入れられている他の形式のいずれかに変更すると、問題は解決するはずです。

今日は、 8 月 9 日( 8/9) に30 日を追加して9 月 8 日( 9/8)になるため、年に数回しか発生しないコードの一部にとって奇妙なケースです。次に、これを8 月 9 日再フォーマットします(9/8 -> 8/9)。これが、同じ日付が何度も表示される理由です。

DateTime は他のスタンドアロンの日付と時刻のメソッドよりも優れているように見えるという理由だけで、Tomas の答えに同意します。ただし、彼は、既存の日時入力が間違った形式であるという問題に対処していませんでした。これが問題の根本にありました。私の (テストされていない) 推測では、DateTime コンストラクターに同じ文字列を使用すると、同じ問題が発生します。

于 2013-08-10T01:14:11.697 に答える