添加到给定日期的用户定义月份

user defined months added to given date

我正在尝试将用户定义的月数添加到之前添加的日期。 $CustDate 已经采用之前格式的 YYYY-MM-DD 格式。

$CustDate=$_POST['formYear'] . "-" . $_POST['formMonth'] . "-" . $_POST['formDay'];

$months=$_POST['formMonthsAdded'];
$d=strtotime("+" . $months . " Months");

$CustAddedDate=date("Y-m-d", strtotime($CustDate, $d));

如果我将日期输入为:2016-08-04 作为 $CustDate,它会为我提供相同的 $CustAddedDate 值。

我哪里搞砸了?谢谢!

您将 + months$CustDate 一起添加。提供 $Cusdate 作为加法中的第二个参数。

$CustAddedDate = date('Y-m-d', strtotime("+" . $months . " Months", strtotime($CustDate)));
                                                                  // ^ add this with the addition

DateTime 变体:

$date = new DateTime($CustDate);
$date->modify('+ ' . $months . ' Month');
$CustAddedDate = $date->format('Y-m-d');
echo $CustAddedDate;
$CustDate=$_POST['formYear'] . "-" . $_POST['formMonth'] . "-" . $_POST['formDay'];

$months=$_POST['formMonthsAdded'];

$d="+" . $months . " Months"; //not strtotime time here!

$CustAddedDate=date("Y-m-d", strtotime($d,strtotime($CustDate)));//watch the order of arguments and missing strtotime of the existing date

注:

$d = strtotime('2016-03-02'); // March 2nd, 2016 -> 1456898400

echo date('Y-m-d', strtotime('+1 day', $d)); -> 2016-03-03
echo date('Y-m-d', strtotime('2010-01-02', $d)); -> 2010-01-02

strtotime() 的第二个参数为任何 "relative" 时间值设置时间基础,例如 +1 dayyesterday。由于您传递的是绝对日期 2016-08-04,因此没有任何 "relative" 衡量标准,并且您的绝对日期将完整用于转换。

如果你想调整那个绝对日期,你必须做类似

的事情
echo date('Y-m-d', strtotime('2016-08-04 + 1 day')) -> 2016-08-05

例如将日期数学嵌入到您传递给 strtotime 的字符串中,而不是在第二个参数中。