2012-05-14 30 views
8

tôi đã viết đoạn mã này để hiển thị ngày + 2 tháng hiện tại:nay: + 2 tháng

<?php 
    $date = date("d/m/Y"); 
    $date = strtotime(date("d/m/Y", strtotime($date)) . "+2 months"); 
    $date = date("d/m/Y",$date); 
    echo $date; 
?> 

Nó dường như không làm việc như nó sẽ hiển thị: 1970/01/03.

Tôi đang làm gì sai?

Cảm ơn sự giúp đỡ của bạn.

EDIT:

Sau khi đọc nhận xét và câu trả lời, tôi đã đơn giản hóa và sửa chữa nó.

<?php 
    $date = date("d/m/Y", strtotime(" +2 months")); 
    echo $date; 
?> 
+0

Thử đặt dấu cách trước '+ 2' của bạn. Và có thể sử dụng hai biến - sử dụng cùng một tên biến hơn và hơn cho các loại dữ liệu khác nhau là khó hiểu và thực hành xấu. – Crontab

+0

Kiểm tra giá trị trả lại thích hợp cũng giúp ích. – hakre

Trả lời

21

Bạn đang thiếu đối số thứ hai cho phần thứ hai strtotime() gọi:

echo date('d/m/Y', strtotime('+2 months')); 
+1

Cẩn thận hơn khi sử dụng strotime. Vào ngày 31 tháng 7, ngày ('dmY') mang lại "31072014" trong khi ngày ('dmY', strotime ('- 1 month')) mang lại "01072014" (tôi mong đợi "30062014"). – AaL

3

Hãy thử sử dụng DateTime object:

$date = new DateTime("+2 months"); 
echo $date->format("d/m/Y"); 
+1

Đúng, nhưng không liên quan đến vụ việc. –

+0

Tại sao câu trả lời này không liên quan? Chỉ cần tò mò @StanislavShabalin –

+0

@MuhammadIbnuh Thành thật mà nói, tôi không thể nhớ hoặc tìm ra nó sau năm năm :--) Có thể vì tại sao sử dụng 'DateTime' khi bạn đã có' strtotime' và bạn nên sửa lỗi chính tả trong câu trả lời được chấp nhận. –

1

Nếu hôm nay là "YYYY-mm-31" và tháng tiếp theo không có ngày thứ 31, nó sẽ hiển thị tháng tiếp theo của ngày đó, làm cho hệ thống hiển thị kết quả "+3 tháng" thay vì kết quả "+2 tháng".

Vì vậy, tôi đoán đây là an toàn nhất:

$end_date=date("Y-m-d",strtotime("+2 month",strtotime(date("Y-m-01",strtotime("now"))))); 

Thay đổi ngày đến ngày 1 đầu tiên.

Các vấn đề liên quan