2

ここで見つけた関数を使用して、月によっては他の月よりも日数が少ないことを考慮して、日付に月を追加しています。

    function addMonths($date_str, $months){
        $date = new DateTime($date_str);
        $start_day = $date->format('j');
 var_dump($date->format('Y-m-d'));
        $date->modify("+{$months} month");
        $end_day = $date->format('j');
        var_dump($date->format('Y-m-d'));
        if ($start_day != $end_day)
            $date->modify('last day of last month');
        var_dump($date->format('Y-m-d'));die();
        return $date->format('Y-m-d');
    }

関数が期待どおりに機能していないため、何が起こっているかを確認するためにいくつかの変数をダンプしました。次のことを試してみましょう。

addMonths('2012-05-31',1)

そして、私は次の間違った出力を取得しています:

string(10) "2012-05-31" string(10) "2012-07-01" string(10) "2012-05-31"

入力日に月を追加すると「2012-07-01」が表示されますが、条件が満たされているため、5月ではなく7月の前月である6月の最終日を取得する必要があります。何が起こっているのかわかりません、助けてくれませんか?

4

3 に答える 3

2

PHPには、PHP5.2.17までのDateTime相対形式にバグがありました。

代わりにこれを試してください:

<?php
function addMonths($date_str, $months) {
  $date      = new DateTime($date_str);
  $start_day = $date->format('j');

  $date->modify("+{$months} month");
  $end_day = $date->format('j');

  if ($start_day != $end_day) {
    $date->modify('last day');
  }

  return $date->format('Y-m-d');
}

echo addMonths('2012-05-31', 1);

私はここにそのような古いバージョンのPHPを持っていませんが、このバージョンで処理できると思いますlast day

私にとってそれは戻ります:

2012-06-30
于 2012-05-02T17:47:18.613 に答える
0

コードをコピーして貼り付けました。PHP5.3.3での出力は次のとおりです。

string(10) "2012-05-31"
string(10) "2012-07-01"
string(10) "2012-06-30"
于 2012-05-02T17:40:32.233 に答える
0
    function add_month($format , $date , $months_to_add ){
        return date($format, strtotime("$date +$months_to_add month"));
}

私はこれを使用しています。これを試すことができます。

于 2015-04-03T15:26:20.003 に答える