0

DateTime() を使用して 2 つの日付の差を計算していますが、正常に動作しています。問題は、日の形式を 1 か月を超えて 30/31 以上にできるようにしたいことです。

$now = new DateTime();
$future_date = new DateTime($contest->expires_at);

$interval = $future_date->diff($now);
$enddate = $interval->format("%m month, %d days, %h hours, %i minutes");

これに関する現在の問題は、月を表示しないと、日が 30/31 までしか表示されず、それを超えた分が新しい月に引き継がれ、残りの日数で日数がカウントされることです。このような形式で、差が 6 週間ある場合に 42 日を表示できるようにしたい:

$enddate = $interval->format("%d days, %h hours, %i minutes");

これに対する簡単な修正はありますか、それとも手動でタイムスタンプを秒に変換し、モジュラス演算子で独自の関数を使用する必要がありますか?

4

3 に答える 3

1

これで問題が解決するはずです:

$now = new DateTime();
$future_date = new DateTime();

// a period of 2 months
$addPeriod = new DateInterval('P2M');

// adding the period
$future_date->add($addPeriod);

// get the differnce
$interval = $future_date->diff($now);

echo($interval->days) . ' days';

今日: echo「61 日」を返します

// 編集

dataInterval-Bug に遭遇しないようにするには、次を使用できます。

$now = new DateTime();
$future_date = new DateTime();

// a period of 2 months
$addPeriod = new DateInterval('P2M');

// adding the period
$future_date->add($addPeriod);

// get the difference in second
$diffTimestamp = $future_date->getTimestamp() - $now->getTimestamp();

// convert to days
// 1 day = 86.400 seconds
$diffDays = $diffTimestamp/86400;

echo(floor($diffDays)) . ' days';
于 2013-04-25T09:42:56.870 に答える
1

あなたが試すことができます:

$enddate = $interval->format("%a days, %h hours, %i minutes");

マニュアルのDateInterval::formatを参照してください。

ノート

Windows で作業している場合は、バグに注意してください。

于 2013-04-25T09:20:57.363 に答える