2009-09-08 142 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