2014-03-31 69 views
3
<?php 

echo "\n"; 
echo $end_date = date('Y-m-d', strtotime('+1 month')); 
echo "\n"; 
$today = date("Y-m-d"); // 2012-01-30 
echo $next_month = date("Y-m-d", strtotime("$today +1 month")); 
echo "\n"; 
$end_date = mktime(date("H"), date("i"), date("s"), date("n") + 1, date("j"), date("Y")); 
echo "\n" . date('Y-m-d',$end_date); 

http://codepad.org/bHiNFIBRPHP獲得之日起一個月後

我怎樣才能得到正確的日期1個月 我嘗試了這些選項。 都回到5月1日,但我需要4月30日

+1

有1個月沒有添加標準的方法在31日,並得到30 :) 也許你必須進行一些IF檢查,當它的第31次獲得下個月的最後一天..當它的一月28 +獲得最後二月.. – Svetoslav

+0

檢查我的答案http:// stackoverflow。問題/ 22755361/php-get-a-date-one-month-later/22755593#22755593 –

回答

11

試着這麼做那..

if(date('d') == 31 || (date('m') == 1 && date('d') > 28)){ 
    $date = strtotime('last day of next month'); 
} else { 
    $date = strtotime('+1 months'); 
} 

echo date('Y-m-d', $date); 

但只要注意,當你3月31日爲1個月+其正確的目標5月1日並非4月30日:)

+0

2016年1月29日:P,但其他,不錯,一個 – MLeFevre

+0

固定... 我錯過了「的」在最後一天的字符串:)沒有它生成+ 1月1日 – Svetoslav

+0

@Svetlyo謝謝 – Bugaloo

3

我建議這樣的:

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

編輯

function addMonth($date) { 
    $date = new DateTime($date); 
    $day = $date->format('j'); 

    $date->modify("+1 month"); 
    $next_month_day = $date->format('j'); 

    if ($day != $next_month_day) 
     $date->modify('last day of last month'); 

    return $date; 
} 

$next_month = addMonth(time()); 
echo $next_month->format("Y-m-d"); 

希望這有助於:-)

+0

第二個strtotime()會打碎所有東西:)它不能爲空 – Svetoslav

+0

它應該是時間()而不是strtotime() – Lab

+0

仍然給予2014-05-01而不是2014-04-30 – Lab

1

嘗試這種解決方案:

echo "\n"; 
$today = date("Y-m-d"); 
$next_month = date("Y-m-d", strtotime("$today +1 month")); 
echo "\n"; 
echo $next_month_last_day = date("Y-m-d",strtotime('-1 second',strtotime($next_month))); 
+0

我喜歡你的建議,但我不會總是得到我所需要的。謝謝 – Bugaloo

相關問題