3

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

例子:

如果用户指定开始日期为 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;
}

我浏览了 SO 问题,只是想看看是否有人对此有所了解,但回答的问题与我的挑战是如此不同。非常感谢能得到这方面的帮助。

4

5 回答 5

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

像这样使用:

$endDate = getAdvertEndDate("2013-04-08", 40);
于 2013-05-31T09:40:49.157 回答
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

于 2013-05-31T09:41:27.320 回答
1

试试这个代码

$date = '2013-06-05'; 
$date1 = strtotime($date);
$date2 = strtotime('+45 day',$date1);
echo date('Y-m-d', $date2);
于 2013-05-31T10:20:12.993 回答
0

本机strtotime()函数可以完成这项工作。

于 2013-05-31T09:37:35.097 回答
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.
于 2013-05-31T09:40:45.373 回答