0

我的数据库中存储了两个变量,其中包含以下数据:

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

我想在广告发布之日起 15 天内展示广告。为此,我需要计算出时差。

我已经在网上阅读了有关计算时差的各个地方,并提出了以下代码

在我尝试计算公式时,我似乎无法计算 $now - 今天的日期、$date_published 和 $advert_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 回答