2009-09-08 85 views
106

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

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

回答

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

谢谢。解决它︰$ stop_date = date('Y-m-d H:i:s',strtotime(“$ stop_date + 1 day”)); – ian 2009-09-08 16:07:12

+2

也应该工作。我不喜欢用“ – w35l3y 2009-09-08 16:15:20

+9

你不应该在字符串中使用一个变量,你应该使用:'date('Ymd H:i:s',strtotime($ stop_date。'+ 1 day'));'as在@ w35l3y给你的答案中 – 2014-02-12 09:52:00

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; 

这不是你也许可以做到这一点的灵巧方式,但它的工程!

+0

请告诉我灵巧诶? – ian 2009-09-08 16:00:02

+0

如何在添加86400时闰秒处理不起作用,因为那一天有86401秒? (好吧,我知道它每隔几年才会发生,但取决于应用程序,这可能很重要) – Glen 2009-09-08 16:05:53

+1

并非所有的日子都有86400秒。事实上,在美国的大多数地方,每年有两次减少3600次或更多秒。 – 2009-09-08 16:10:52

1

虽然我与道格·海斯答案达成一致,我会附和这里要说的是你的代码的原因不起作用是因为strtotime()期望INT作为第二个参数,而不是一个字符串(即使是代表日期的一个字符串)

如果你打开最大错误报告,你会看到这是一个“非正确形成的数字价值“错误,即E_NOTICE等级。

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

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

这是一个更新的完全解决方案 – 2014-02-12 09:56:16

+0

..只要它不会在你的主机上运行时造成致命错误;) – 2015-01-13 13:18:53

+0

不要道歉有些人在你做完3年后发布了dame回答 – Mawg 2016-02-12 16:34:32

6

试试这个

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

感谢队友,它帮助了我 – 2017-10-02 14:50:02

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; 
+2

有时候会这样如果白天不是24小时,则会导致夏令时更改失败。 – 2016-02-21 21:34:04

20

简单的解决方案:

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

我喜欢你的方式在一个班轮'回声(新DateTime('+ 1天')) - >格式('Ymd H:我:S');' – Aba 2016-07-01 14:28:09

+0

@Aba我不认为你的一个班轮工程旧版本的PHP,因为我尝试了它,我得到了一个错误:在PHP''中的意外的T_OBJECT_OPERATOR“错误” – 2017-09-01 12:20:35

0

下面的代码获得一月的第一天当年(但可能是另一个日期)和添加365天当天(但它可以是N的天数),使用DateTime类及其方法修改()和格式():

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

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

创建与当前日期和时间的新DateTime对象:

$due_dt = new DateTime(); 

一旦有DateTime对象,你可以通过增加或减少的时间段操纵它的价值:

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

你可以阅读更多关于PHP Manual

6

它的工作对我来说: 对于当前日期

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

为anydate:

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

谢谢它为我工作。 给出最简单的解决方案。 – 2017-12-13 13:42:10

相关问题