2

重複の可能性:
PHP を使用して 2 つの日付の差を計算する方法は?

ここに画像の説明を入力

$begintime=strtotime("2012-12-19");
$endtime=strtotime("2013-02-22");

結果は次のようになります。

array(
array('text'=>'12/2012','days'=>13),
array('text'=>'01/2013','days'=>31)
array('text'=>'02/2013','days'=>22)
)
4

2 に答える 2

4

私はそれをオブジェクト指向のアプローチで作業することを好みます。

$begintime = new DateTime('2012-12-19'); // always use single quote whenever possible
$endtime = new DateTime('2013-01-22');
$time_interval = $endtime->diff($begintime); // in DateInterval object format

echo 'the time interval will be: ' . $time_interval->format('%d') . ' days';

提案した配列形式への変換については、ご自身で行ってください。(質問の焦点では​​ないと思います)

于 2012-12-19T07:54:29.067 に答える
3

日を取得するには、これを試してください:

$begintime = '2012-12-19';
$endtime = '2013-02-22';
$bd = new DateTime($begintime);
$ed = new DateTime($endtime);

$c = $bd->format('t') - $bd->format('d') + 1;
$pass = false;

while($bd->format('Y') < $ed->format('Y')
        || $bd->format('n') < $ed->format('n')) {
    $bd->modify("+1 month");
    echo $c." ";
    $c = $bd->format('t');
    $pass = true;
}
$c = $ed->format('d');
if(!$pass)
    $c -= $bd->format('d') - 1;
echo $c;

http://ideone.com/07wqkpを参照

$bd->format('t')1 か月の最大日数を指定します。

ideone は PHP 5.2.11 を使用します。PHP 5.4で使用できると思います

$bd->add(new DateInterval("P1M"));

の代わりに$bd->modify("+1 month");

編集:同じ月と年に開始および終了する場合のバグを修正しました。

編集: 明示的な比較に戻しました。よく考えてみると、if/else を使用しないほうがよいでしょう。

于 2012-12-19T08:18:44.653 に答える