将一天添加到日期

时间:2009-09-08 15:55:34

标签: php date datetime

我在一天中添加一天的代码会返回添加前一天的日期: 添加一天后的2009-09-30 20:24:00日期应该推迟到下个月:1970-01-01 17:33:29

<?php

    //add day to date test for month roll over

    $stop_date = date('Y-m-d H:i:s', strtotime("2009-09-30 20:24:00"));

    echo 'date before day adding: '.$stop_date; 

    $stop_date = date('Y-m-d H:i:s', strtotime('+1 day', $stop_date));

    echo ' date after adding one day. SHOULD be rolled over to the next month: '.$stop_date;
?>

之前我使用过非常相似的代码,我在这里做错了什么?

12 个答案:

答案 0 :(得分:286)

<?php
$stop_date = '2009-09-30 20:24:00';
echo 'date before day adding: ' . $stop_date; 
$stop_date = date('Y-m-d H:i:s', strtotime($stop_date . ' +1 day'));
echo 'date after adding 1 day: ' . $stop_date;
?>

对于PHP 5.2.0+,您还可以执行以下操作:

$stop_date = new DateTime('2009-09-30 20:24:00');
echo 'date before day adding: ' . $stop_date->format('Y-m-d H:i:s'); 
$stop_date->modify('+1 day');
echo 'date after adding 1 day: ' . $stop_date->format('Y-m-d H:i:s');

答案 1 :(得分:82)

$date = new DateTime('2000-12-31');

$date->modify('+1 day');
echo $date->format('Y-m-d') . "\n";

答案 2 :(得分:25)

最简单的解决方案:

$date = new DateTime('+1 day');
echo $date->format('Y-m-d H:i:s');

答案 3 :(得分:13)

它为我工作: 当前日期

$date = date('Y-m-d', strtotime("+1 day"));

for anydate:

date('Y-m-d', strtotime("+1 day", strtotime($date)));

答案 4 :(得分:6)

试试这个

echo date('Y-m-d H:i:s',date(strtotime("+1 day", strtotime("2009-09-30 20:24:00"))));

答案 5 :(得分:5)

易于阅读和理解的方式:

$original_date = "2009-09-29";

$time_original = strtotime($original_date);
$time_add      = $time_original + (3600*24); //add seconds of one day

$new_date      = date("Y-m-d", $time_add);

echo $new_date;

答案 6 :(得分:2)

我总是只添加86400(一天中的秒数):

$stop_date = date('Y-m-d H:i:s', strtotime("2009-09-30 20:24:00") + 86400);

echo 'date after adding 1 day: '.$stop_date; 

这不是你可能做到的最简单的方式,但它有效!

答案 7 :(得分:1)

虽然我同意Doug Hays的回答,但我会在这里说你的代码不起作用的原因是因为strtotime()期望INT作为第二个参数,而不是字符串(甚至一个代表日期)

如果启用最大错误报告,您会将此视为“非格式错误的数值”错误,即E_NOTICE级别。

答案 8 :(得分:1)

可用于将增量添加到现有modify()值的DateTime方法。

使用当前日期和时间创建一个新的DateTime对象:

$due_dt = new DateTime();

获得DateTime对象后,您可以通过添加或减去时间段来操纵其值:

$due_dt->modify('+1 day');

您可以在PHP Manual上阅读更多内容。

答案 9 :(得分:1)

<?php

function plusTimetoOldtime($Old_Time,$getFormat,$Plus_Time) {
    return date($getFormat,strtotime(date($getFormat,$Old_Time).$Plus_Time));
}

$Old_Time = strtotime("now");
$Plus_Time = '+1 day';
$getFormat = 'Y-m-d H:i:s';

echo plusTimetoOldtime($Old_Time,$getFormat,$Plus_Time);

?>

答案 10 :(得分:0)

以下代码获取当年1月的第一天(但它可以是另一个日期)并使用DateTime类及其方法modify()添加当天365天(但可以是N天)和format():

echo (new DateTime((new DateTime())->modify('first day of January this year')->format('Y-m-d')))->modify('+365 days')->format('Y-m-d');

答案 11 :(得分:-1)

既然您已经对代码的问题有一个答案,那么我可以就如何处理日期时间提出另一种观点,并专门解决您的问题。

通常您会发现自己在解决方案方面存在问题。这只是您使用命令式代码的原因之一。如果有效,那太好了;还有其他,可以说是更具可维护性的替代方案。其中之一是declarative代码。关键是要问您需要什么,而不是怎么到达那里。

在您的特定情况下,它可能如下所示。首先,您需要找出正在寻找的 ,即发现抽象。就您而言,您似乎需要一个日期。不仅是任何日期,而且还有一些标准的表示形式。说,ISO8601日期。至少有两种实现方式:第一种是从ISO8601格式的字符串(或实际上是任何其他格式的字符串)解析的日期,第二种是在一天之后的某个将来的日期。因此,整个代码可能如下所示:

(new Future(
    new DateTimeParsedFromISO8601('2009-09-30 20:24:00'),
    new OneDay()
))
    ->value();

有关日期时间变化的更多示例,请查看this one