0

次のデータを含む2つの変数がデータベースに保存されています。

$date_published = 2012-05-04 00:00:00; //Straight from DB datetime field
$advert_duration = 15;

掲載日から15日間広告を掲載したい。そのためには、時差を計算する必要があります。

私は時差の計算についてオンラインでさまざまな場所を読み、以下のコードを思いついた

方程式を解こうとして、$ now(今日の日付、$ date_published、および$ adsvert_duration)の違いを計算できないようです。正しい結果が得られません:

function days_left($date_published, $advert_duration){

    $date = new DateTime($date_published);

    $now = new DateTime();

    $days_elapsed = $date->diff($now)->format("%d");

    $days_left = $advert_duration - $days_elapsed;

    return $days_left;
}
4

2 に答える 2

2
function getDaysLeft( $date, $duration )
{
    // create $date and modify it by $duration
    $date = new DateTime( $date );
    $date->modify( sprintf( '+%d days', $duration ) );

    // calculate the difference
    $now = new DateTime();
    $daysElapsed = (int) $now->diff( $date )->format( '%a' );

    // set to negative value, if modified $date is before $now
    if( $date < $now )
    {
        $daysElapsed = $daysElapsed * -1;
    }
    return $daysElapsed;
}

var_dump(
    getDaysLeft( '2012-05-04 00:00:00', 15 ),
    getDaysLeft( '2012-07-04 00:00:00', 15 )
);
于 2012-07-09T13:41:19.497 に答える
1

データベースから広告を取得している場合は、日付関数を使用してこれを計算できます。

 WHERE DATE_SUB(CURDATE(),INTERVAL 15 DAY) >= date

または、PHP でこれを行うこともできます (UNIX タイムスタンプを取得します)。

 $date = strtotime('+15 days', strtotime($date_published));
于 2012-07-09T13:21:02.177 に答える