2

2つの日付の日付差を計算する関数を使用しました。

これが私の機能です

function date_difference ($date_1, $date_2) {   


    $val_1 = new DateTime($date_1);
    $val_2 = new DateTime($date_2);

    $interval = $val_1->diff($val_2);
    $year     = $interval->y;
    $month    = $interval->m;
    $day      = $interval->d;

    $output   = '';

    if($year > 0){
        if ($year > 1){
            $output .= $year." years ";     
        } else {
            $output .= $year." year ";
        }
    }

    if($month > 0){
        if ($month > 1){
            $output .= $month." months ";       
        } else {
            $output .= $month." month ";
        }
    }

    if($day > 0){
        if ($day > 1){
            $output .= $day." days ";       
        } else {
            $output .= $day." day ";
        }
    }
    if($day == 0)
        $output.=' Almost Over';
    if($day < 0)
        $output.= ' Expired';
    return $output;
}

こんな感じで使っています

echo date_difference(date('m/d/Y'),'02/06/2013');

結果は25日として表示されますが、期限切れと表示されます。誰かが私が間違っているところを指摘できますか?

4

3 に答える 3

2

このXKCDページを見てすぐに、投稿する機会が欲しかったのですが、ここにあります。

xkcd

コードが解析しようとすると02/06/2013、「2月2日」を意味するのか、「6月6日」を意味するのかをどのように知ることができますか?解析する日付を指定するときは常にこの形式を使用する必要がありYYYY-MM-DDますが、実際の数値タイムスタンプ(この場合は1360126800)をハードコーディングすることをお勧めします。

于 2013-03-03T04:11:22.113 に答える
2

DateInterval負の値はありません。2 つの DateTime オブジェクトを比較する必要があります。

への変更

if($val_1 < $val_2 && $day == 0)
    $output.=' Almost Over';
if($val_1 > $val_2)
    $output.= ' Expired';
return $output;
于 2013-03-03T04:17:48.740 に答える
1

UNIXタイムスタンプを使用するだけで、非常に簡単に計算できます。

YDMで表示でき、少し凝った感じがあればカウントダウン時計を作ることもできます。

ほとんどのMMOと管理システムは、これを使用して登録の日時を登録し、メンバーがコミュニティに参加していた期間を示します。

お役に立てば幸いです。

于 2013-03-03T04:09:17.477 に答える