2016-04-15 123 views
5

我有這種形式的日期 - - 20160428000000(2016年4月28日),即年月日......添加天至一個月一個月PHP的最後一天不超過

我需要,如果某些天(例如3)是加入到這個日期 - 它應該添加它們,但不能超過一個月(04) - 預期產出 - 20160430000000 - 4月30日

同樣,20160226000000 +5天應該返回20160229000000即閏年二月也就是說,它不應該跳到另一個月。

任何提示/想法?

+0

獲取您的日期和該月的最後一個日期之間的時間間隔。如果此間隔小於給定的添加時間間隔,則返回該月份的最後一天。 – mitkosoft

回答

3

另一種方法是使用DateTime類來檢查出來:

當然

首先創建對象直通輸入。然後,設置月份對象的結束日期。

之後,進行添加,然後檢查是否超過結束日。如果是的話,將其設置到最後,如果沒有,那麼得到的加法的結果:

$day = 5; // days to be added 
$date = '20160226000000'; // input date 
$dt = DateTime::createFromFormat('YmdHis', $date); // create the input date 
$end = clone $dt; // clone/copy the input 
$end->modify('last day of this month'); // and set it to last day 
$dt->add(DateInterval::createFromDateString("+{$day} days")); // add x days 
// make comparision 
$final_date = ($dt > $end) ? $end->format('YmdHis') : $dt->format('YmdHis'); 
echo $final_date; 
+1

不錯,優雅! +1 – mitkosoft

+0

這也可以,非常感謝 – jitendrapurohit

+0

我正在使用'DateTimeImmutable'提出類似的建議,但它基本上是相同的邏輯。 +1 :) – Narf

1

爲此,您可以嘗試這樣的:

$given_date = 20160428000000; 
$no_of_day = 3; 

if(date('m',strtotime($given_date)) < date('m',strtotime($given_date ." +".$no_of_day."days"))){ 
    echo "Exceeded to next month <br/>"; 
    echo "Last date of month should be: ".date("t M Y", strtotime($given_date)); 
} 
else { 
    echo "Next date will be after ".$no_of_day." day(s)<br/>"; 
    echo date('d M Y',strtotime($given_date ." +".$no_of_day."days")); 
} 

如果一個月會跳轉到下個月,然後它會顯示當月最後日期。 其他方面,它會顯示延長天數後的日期。

+0

謝謝,但這會給我最後的日期 - 4月30日? – jitendrapurohit

+0

@jitendrapurohit!是的,它會嘗試。 – Yash

+0

是的,它的工作原理!謝謝 – jitendrapurohit

0

如果添加的日期超過最後一天,將選擇的最後一天,新的日期。

<?php 
$date_orig = 20160226000000; 
$add_day = 5; # No. of days to add 

$added_date  = strtotime($date_orig. ' + '.$add_day.' days'); // Add $add_day to $date_orig 
$last_date  = strtotime(date("YmtHis", strtotime($date_orig))); // Last day of $date_orig 
$new_date  = ($added_date > $last_date) ? $last_date : $added_date; // check the added date exceeds the last date 
$new_date_format = date("YmdHis", $new_date); // Format Date 

echo $new_date_format; 
?>