我正在尝试创建一个函数,根据用户传递的开始日期和持续时间参数来确定广告的结束日期。
示例:
如果用户指定开始日期为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;
}
我浏览过这些问题只是为了看看是否有人有这个问题,但回答的问题与我的挑战有很大不同。 非常感谢获得帮助。
答案 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
答案 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.