Thêm ba tháng vào một ngày trong PHP


90

Tôi có một biến $effectiveDatecó tên chứa ngày 2012-03-26 .

Tôi đang cố gắng thêm ba tháng cho ngày này và đã không thành công.

Đây là những gì tôi đã thử:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate));

$effectiveDate = strtotime(date("Y-m-d", strtotime($effectiveDate)) . "+3 months");

Tôi đang làm gì sai? Không có đoạn mã nào hoạt động.


6
"Không hoạt động" có nghĩa là gì?
Jon

2
Tôi đang nhận được 1340649000câu trả lời, có vẻ là đúng.
Dogbert

Bạn có chắc chắn $effectiveDatelưu trữ những gì bạn nghĩ rằng nó lưu trữ? Nó làm việc cho tôi .
Josh

Tôi hy vọng rằng ngày để 2012/06/26 thêm 3 tháng để 2012-03-26
user979331

date('Y-m-d', 1340661600)đưa ra 2012-06-26IS nào là chính xác.
Tchoupi

Câu trả lời:


193

Thay đổi nó thành này sẽ cung cấp cho bạn định dạng mong đợi:

$effectiveDate = date('Y-m-d', strtotime("+3 months", strtotime($effectiveDate)));

Làm thế nào để đối phó với một biến số tháng? như $ tháng chứa số tháng? "+ '$months' months"không hoạt động
HKK

4
$offset = 5; echo date('Y-m-d', strtotime("+$offset months", strtotime('2000-01-01'))); Demo
Cees Timmerman

date () không sử dụng bản địa hóa. Tốt hơn là strftime ().
user706420

2
Điều đó sẽ không hoạt động cho những ngày như thế này: date ('2018-01-31', strtotime ('+ 3 tháng')). Nếu ngày kết thúc vào ngày 31 và 3 tháng tiếp theo không kết thúc, nó sẽ không trả về ngày chính xác.
Dan H

3
không giải pháp tốt - không trả lại giá trị đúng - như Dan H đề cập
Josef Vancura

17

Câu trả lời này không chính xác cho câu hỏi này. Nhưng tôi sẽ thêm điều này vì câu hỏi này vẫn có thể tìm kiếm được về cách thêm / trừ khoảng thời gian kể từ ngày.

$date = new DateTime('now');
$date->modify('+3 month'); // or you can use '-90 day' for deduct
$date = $date->format('Y-m-d h:i:s');
echo $date;

5

Tôi giả sử bằng cách "không hoạt động", bạn có nghĩa là nó cung cấp cho bạn dấu thời gian thay vì ngày được định dạng, bởi vì bạn đã làm đúng:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate)); // returns timestamp
echo date('Y-m-d',$effectiveDate); // formatted version

3

Bạn cần chuyển đổi ngày tháng thành một giá trị có thể đọc được. Bạn có thể sử dụng strftime () hoặc date ().

Thử đi:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate));
$effectiveDate = strftime ( '%Y-%m-%d' , $effectiveDate );
echo $effectiveDate;

Điều này sẽ hoạt động. Tôi thích sử dụng strftime hơn vì nó có thể được sử dụng để bản địa hóa, bạn có thể muốn thử nó.


3

Câu trả lời của Tchoupi có thể bớt dài dòng hơn bằng cách nối đối số cho strtotime () như sau:

$effectiveDate = date('Y-m-d', strtotime($effectiveDate . "+3 months") );

(Điều này phụ thuộc vào các chi tiết triển khai ma thuật, nhưng bạn luôn có thể xem chúng nếu bạn thực sự không tin tưởng.)


2

Những điều sau sẽ hoạt động, Hãy thử điều này:

$effectiveDate = strtotime("+1 months", strtotime(date("y-m-d")));
echo $time = date("y/m/d", $effectiveDate);

1

Sau đây sẽ hoạt động

$d = strtotime("+1 months",strtotime("2015-05-25"));
echo   date("Y-m-d",$d); // This will print **2015-06-25** 

1

Thêm Ngày thứ n, tháng và năm

$n = 2;
for ($i = 0; $i <= $n; $i++){
    $d = strtotime("$i days");
    $x = strtotime("$i month");
    $y = strtotime("$i year");
    echo "Dates : ".$dates = date('d M Y', "+$d days");
    echo "<br>";
    echo "Months : ".$months = date('M Y', "+$x months");
    echo '<br>';
    echo "Years : ".$years = date('Y', "+$y years");
    echo '<br>';
}

0

Cách sau sẽ hoạt động, nhưng bạn có thể cần thay đổi định dạng:

echo date('l F jS, Y (m-d-Y)', strtotime('+3 months', strtotime($DateToAdjust)));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.