2016-04-15 28 views
5

Tôi có ngày theo hình thức này - - 20160428000000 (28 tháng 4 năm 2016) tức là yyyymmdd ...thêm ngày để tháng không quá ngày cuối cùng của tháng php

Tôi cần rằng nếu một số ngày (ví dụ 3.) Là thêm vào ngày này - nó nên thêm họ nhưng không được vượt quá tháng (04) - sản lượng dự kiến ​​- 20160430000000 - tháng Tư 30

Tương tự, 20160226000000 + 5days nên trở 20160229000000 tức là năm nhuận tháng hai Điều đó có nghĩa, nó không nên nhảy đến Tháng khác.

Bất kỳ gợi ý/ý tưởng nào?

+0

lấy khoảng thời gian giữa ngày và ngày cuối cùng của bạn trong tháng. Nếu khoảng thời gian này nhỏ hơn khoảng thời gian đã cho để thêm, chỉ cần quay lại ngày cuối cùng của tháng. – mitkosoft

Trả lời

3

Một lựa chọn khác là sử dụng DateTime lớp để kiểm tra xem nó ra:

Đầu tiên dĩ nhiên tạo ra đối tượng của bạn thông qua các đầu vào. Sau đó, đặt ngày kết thúc của đối tượng tháng.

Sau đó, thực hiện bổ sung rồi kiểm tra xem nó có vượt quá ngày kết thúc hay không. Nếu có, hãy đặt nó vào cuối cùng, nếu không, sau đó nhận được kết quả của việc bổ sung:

$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

đẹp và thanh lịch! +1 – mitkosoft

+0

Điều này cũng hoạt động, Cảm ơn rất nhiều – jitendrapurohit

+0

Tôi đã đề nghị một cái gì đó tương tự bằng cách sử dụng 'DateTimeImmutable', nhưng về cơ bản nó là cùng một logic. +1 :) – Narf

1

Đối với điều này bạn có thể thử như thế này:

$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")); 
} 

Nếu tháng sẽ chuyển sang tháng tiếp theo sau đó nó sẽ hiển thị tháng hiện tại ngày cuối cùng. khác khôn ngoan nó sẽ hiển thị ngày sau khi số ngày mở rộng.

+0

Cảm ơn, nhưng điều này sẽ cho tôi ngày cuối cùng - 30 tháng tư? – jitendrapurohit

+0

@jitendrapurohit! Có nó sẽ, hãy thử nó. – Yash

+0

Vâng, nó hoạt động! Cảm ơn – jitendrapurohit

0

Nếu ngày thêm vượt quá ngày cuối cùng, sẽ chọn ngày cuối cùng là ngày mới.

<?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; 
?> 
Các vấn đề liên quan