将一天添加到日期的代码返回日期之前的日期: 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;
?>

我之前用过类似的代码,这里我做错了什么?


我总是加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; 

这可能不是你能做到的最巧妙的方法,但它是有效的!


<?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');

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

如果你打开最大错误报告,你会看到这是一个E_NOTICE级别的“非格式良好的数值”错误。


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

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

试试这个

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

简单的阅读和理解方式:

$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;

最简单的解决方案:

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

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

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

modify()方法,可用于向现有DateTime值添加增量。

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

$due_dt = new DateTime();

一旦你有了DateTime对象,你可以通过添加或减去时间段来操作它的值:

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

你可以在PHP手册上阅读更多。


这招对我很管用: 当前日期

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

anydate:

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

既然您已经对代码中的错误有了答案,那么我可以从另一个角度介绍如何处理日期时间,并具体地解决您的问题。

通常你会发现自己在解决问题的时候提出了一个问题。这只是使用命令式代码的原因之一。如果能成功就太好了;还有其他一些更具可维护性的替代方案。其中之一是声明性代码。重点是问你需要什么,而不是怎么去做。

In your particular case, this can look like the following. First, you need to find out what is it that you're looking for, that is, discover abstractions. In your case, it looks like you need a date. Not just any date, but the one having some standard representation. Say, ISO8601 date. There are at least two implementations: the first one is a date parsed from an ISO8601-formatted string (or a string in any other format actually), and the second is some future date which is a day later. Thus, the whole code could look like that:

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

要了解更多关于datetime杂耍的例子,请看这篇文章。


<?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);

?>

你可以使用DateTime()和DateInterval()在今天的日期上添加一天,如下所示:

echo (new DateTime())->add(new DateInterval('P1D'))->format('Y-m-d');

或特定的日期:

$date = '2009-09-30 20:24:00';
echo (new DateTime($date))->add(new DateInterval('P1D'))->format('Y-m-d');

由于我们经常通过API从另一个时区接收ISO字符串,我们可以动态地将其转换为本地时间:

// The machine local time is GMT+2, but we received a date at GMT+0 (UTC)
echo date(DATE_ISO8601, strtotime("-1 hour", strtotime("2022-08-17T23:25:51-00:00")));
// 2022-08-18T00:25:51+0200