在PHP日期中添加天数时,不会增加到明年

时间:2016-09-15 22:41:16

标签: php mysql date

我正在抓取一个我必须输入日期范围才能获取数据的网站。我的开始日期范围是2009-01-01到2009-01-14。然后我将下一个日期范围增加15天,以便我总是做14天的块(以免每次刮取过多的数据)。

执行此操作的代码是:

$result = sqlGetState($db); //a sql query that gets the last start date - end date
$startDate = $result['startDate']; // start date from db
$endDate = $result['endDate']; // end date from db

$newStartDate = date('Y-m-d', strtotime($endDate. ' + 1 days')); // create a new start date, which is equal to the previous end date + 1 day 
$newEndDate = date('Y-m-d', strtotime($newStartDate. ' + 14 days')); // create a new end date, which is equal to the new start date + 14 days.
$timestamp = date('Y-m-d H:i:s', time() ); //2016-08-07 08:42:43
$affected_rows = sqlUpdateState($db,$newStartDate,$newEndDate,$timestamp); // update the "state" table with the new date values

那么在我的"状态" table是我执行操作,新日期和新日期+ 14天时的时间戳。

这很顺利,但在某些时候我检查了我存储html的表格,并且我看不到存储了新页面。然后我看看我的状态表,我看到了

开始日期: 01/02/1970 和结束日期: 01/16/1970

我认为PHP足够聪明"要知道,当它到12/31它应该将日期增加到下一年。这是PHP日期函数中的一个缺陷,还是我应该做的事情?

更新时间:2016年9月16日

根据@ bill-karwin选择的最佳答案,这是我修改后的代码,它运作良好:

$result = sqlGetState($db);
$startDate = date_create($result['startDate']);
$endDate   = date_create($result['endDate']);

echo "<p>saved start date: ".$startDate->format("Y-m-d")."</p>";
echo "<p>saved end date: ".$endDate->format("Y-m-d")."</p>";

$newStartDate = date_add($endDate, date_interval_create_from_date_string("1 days"));
$newStartDateString = $newStartDate->format("Y-m-d");

$newEndDate   = date_add($newStartDate, date_interval_create_from_date_string("14 days"));
$newEndDateString   = $newEndDate->format("Y-m-d");

echo "<p>new start date: " . $newStartDateString . "</p>";
echo "<p>new end date: " . $newEndDateString . "</p>";

$affected_rows = sqlUpdateState($db,$newStartDateString,$newEndDateString,$timestamp);

1 个答案:

答案 0 :(得分:3)

我不认为strtotime()可以像你一样用来做日期算术。

我建议你这样编码:

$startDate = date_create($result['startDate']);
$endDate = date_create($result['endDate']);

$newStartDate = date_add($endDate, date_interval_create_from_date_string("1 days"));
$newEndDate = date_add($newStartDate, date_interval_create_from_date_string("14 days"));
$timestamp = date_create();

参见手册: