PHP:使用用户指定的开始日期和持续时间生成结束日期

时间:2013-05-31 09:33:54

标签: php date

我正在尝试创建一个函数,根据用户传递的开始日期和持续时间参数来确定广告的结束日期。

示例:

如果用户指定开始日期为2013年6月5日,持续时间为45天:

$ad_startdate = '2013-06-05';
$ad_duration = 45;

该功能应自动获得截止日期为2013年7月20日的结束日期:

$ad_end_date = '2013-07-20';

请注意,为了便于生成结束日期,我已经为变量分配了一个恒定值,即30天。无论是2月或11月还是闰年,每个月的固定变量值为30。

我试图想出一些关于这件事但却无法弄明白的事情。

$ad_startdate = '2013-06-05';
$ad_duration = 45;

// End date should be 2013-07-20


function getAdvertEndDate ($ad_startdate, $ad_duration){

    //Add up start date with duration
    $end_date = strtotime($ad_startdate) + $ad_duration;

return $end_date;
}

我浏览过这些问题只是为了看看是否有人有这个问题,但回答的问题与我的挑战有很大不同。 非常感谢获得帮助。

5 个答案:

答案 0 :(得分:1)

function getAdvertEndDate ($ad_startdate, $ad_duration){
    return date("Y-m-d", strtotime($ad_startdate) + ($ad_duration * 86400));
}

像这样使用:

$endDate = getAdvertEndDate("2013-04-08", 40);

答案 1 :(得分:1)

PHP> = 5.3.0面向对象的风格

$date = DateTime::createFromFormat('Y-m-d', '2013-06-05');
$date->add(new DateInterval('P45D'));
echo $date->format('Y-m-d') . "\n";

或程序风格

$date = date_create('2013-06-05');
date_add($date, date_interval_create_from_date_string('45 days'));
echo date_format($date, 'Y-m-d');

结果:

2013-07-20

代码:

function getAdvertEndDate ($ad_startdate, $ad_duration){
    $date = DateTime::createFromFormat('Y-m-d', $ad_startdate);
    $date->add(new DateInterval('P'.$ad_duration.'D'));
    return $date->format('Y-m-d');
}

对于PHP< 5.3使用 strtotime()

function getAdvertEndDate ($ad_startdate, $ad_duration){
    //Add up start date with duration
    return date('Y-m-d', strtotime($ad_startdate. " + $ad_duration days"));
}    

echo getAdvertEndDate('2013-06-05', '45'); // 2013-07-20

http://www.php.net/manual/en/datetime.add.php

答案 2 :(得分:1)

试试此代码

$date = '2013-06-05'; 
$date1 = strtotime($date);
$date2 = strtotime('+45 day',$date1);
echo date('Y-m-d', $date2);

答案 3 :(得分:0)

本机strtotime()函数可以正常工作。

答案 4 :(得分:0)

使用此:

$ad_startdate = '2013-06-05';
$ad_duration = 45;

$dateArray = explode('-', $ad_startdate);

$newDate = date('Y-m-d', strtotime('+ ' . $ad_duration . ' days', mktime(0, 0, 0, $dateArray[1], $dateArray[2], $dateArray[0]));

如果您使用的是strtotime,则无法使用您指定的日期格式,就像使用-分隔符一样,strtotime()期望格式不同。

来自PHP.net

Note:
Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.

To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or DateTime::createFromFormat() when possible.