2013-05-31 27 views
3

我想创建一个函数,该函数根据用户传递的开始日期和持续时间参数确定广告的结束日期。PHP:根据用户指定的开始日期和持续时间生成结束日期

例子:

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

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

功能自动地获得这应该是2013年7月20日结束日期:

$ad_end_date = '2013-07-20'; 

请注意,为了便于生成结束日期,我已将变量分配给了一个恒定的值,这个值将是30天。无论是二月或十一月还是闰年,每个月都有一个固定的变量值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; 
} 

我已经通过做题浏览只是为了看看是否有人解决这个东西,但是那些回答从我的挑战如此不同。 将非常感激得到这个帮助。

+0

@everyone谁提供了一个答案或评论的帮助,谢谢!非常感谢... – John

回答

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

使用像这样:

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

完美的作品......非常感谢! – John

+0

这可能会产生意想不到的结果。 strtotime可能会使用提供的格式感到困惑,请阅读http://php.net/strtotime –

+0

上的注意事项由于不是所有的日子都是86400(= 24小时),所以请注意添加“days * 86400”!在某些情况下它可能会产生意想不到的结果(至少每年两次)我强烈建议像Andrey Volk's(或singh's)这样的解决方案, – Qualcuno

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. 
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

1

试试这个代码

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