1

ユーザーが月額で支払うサブスクリプションサービスを開発しています。

私は2つの日付を持っています

1:2012-12-05($ today)

2:2013-01-05($ end_date)

私にとって、それは一ヶ月です。しかし、PHPの場合、それはわずか30日です。

ここにいくつかのコードがあります(上にマップされた日付の値を見ることができます)

$end_date_for_new_agents = clone $end_date;
$end_date_for_new_agents = $end_date_for_new_agents->add(new DateInterval("P1D"));
$agent_period_months_obj = $today->diff($end_date_for_new_agents);
echo $agent_period_months_obj->format("%y-%m-%d")

これは0-0-30をエコーし​​ます

それはなぜですか?PHPに、異なる月の同じ日付の差を月全体として計算させるにはどうすればよいですか?

4

1 に答える 1

2

時間も考慮する必要があります。そうしないと、1日が完了しません。

例えば:

date_default_timezone_set("Europe/Rome");
$end='2013-01-05';
$intervalo = date_diff(date_create(), date_create($end));
echo $intervalo->format("Years:%Y,Months:%M,Days:%d,Hours:%H,Minutes:%i,Seconds:%s");

結果として与える:

Years:00,Months:00,Days:30,Hours:05,Minutes:59,Seconds:53

次のコード

date_default_timezone_set("Europe/Rome");
$start='2012-12-05';
$end='2013-01-05';
$intervalo = date_diff(date_create($start), date_create($end));
echo $intervalo->format("Years:%Y,Months:%M,Days:%d,Hours:%H,Minutes:%i,Seconds:%s");

結果を出す:

Years:00,Months:01,Days:0,Hours:00,Minutes:0,Seconds:0

の値に$today時間も含まれているかどうかを確認します。含まれている場合は、日付のみを抽出して時間を忘れる必要があります

于 2012-12-05T17:02:50.217 に答える