2011-07-22 39 views

Trả lời

180

date() bản thân chỉ dành cho định dạng, nhưng nó chấp nhận tham số thứ hai.

date("F j, Y", time() - 60 * 60 * 24); 

Để đơn giản tôi chỉ trừ 24 giờ từ dấu thời gian unix.

Một oop-cách tiếp cận hiện đại đang sử dụng DateTime

$date = new DateTime(); 
$date->sub(new DateInterval('P1D')); 
echo $date->format('F j, Y') . "\n"; 

Hoặc trong trường hợp của bạn (dễ đọc hơn/rõ ràng)

$date = new DateTime(); 
$date->add(DateInterval::createFromDateString('yesterday')); 
echo $date->format('F j, Y') . "\n"; 

(Bởi vì DateInterval là tiêu cực ở đây, chúng ta phải add() nó ở đây)

Xem thêm: DateTime::sub()DateInterval

+0

Cảm ơn đã phản ứng nhanh chóng. –

+3

câu trả lời rất hay, có rất nhiều cách để thực hiện nhưng bạn có một cách đơn giản, ngắn gọn và dễ hiểu (+ OOP cho những ai quan tâm đến việc sử dụng nhiều RAM hơn) – neofutur

+3

@neofutur Bên cạnh "chúng tôi muốn lãng phí RAM" cách tiếp cận OOP rất hữu ích, khi bạn đã có một đối tượng 'DateTime'- hoặc' DateInterval' (hoặc cả hai), có thể là trường hợp trong một ứng dụng dựa trên OOP (ví dụ '$ customer-> expire- > add (DateInterval :: createFromDateString ('+ 1 year')) // khách hàng trả tiền thêm một năm') Cũng lưu ý rằng 'DateInterval' hiểu ISO8601 trong khoảng thời gian, nhưng' date() 'thì không. Vào cuối khóa học: Chọn một trong những bạn tốt hơn phù hợp với nhu cầu của bạn :) – KingCrunch

116

strtotime(), như trong date("F j, Y", strtotime("yesterday"));

+13

+1 vì điều này làm cho ý định rõ ràng hơn một chút khi quét qua mã. Mã tự viết và mọi thứ. –

81

Làm thế nào dễ dàng :)

date("F j, Y", strtotime('-1 days')); 
+4

Tôi thích câu trả lời này. Giá trị offset ('-1') không phải là hằng số: nó có thể được tạo với một biến, ngay cả với một vòng lặp: 'strtotime ('-'. $ S. 'Days')' trong đó '$ s' là bao nhiêu ngày trở lại (hoặc chuyển tiếp nếu chơi với các dấu hiệu) bạn muốn đi. – Henry

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