2010-04-25 30 views
41

Vâng, lợi nhuận sau những gì ngày là 5 ngày trước:Làm cách nào để biết ngày đó là 5 ngày trước?

$days_ago = date('Y-m-d', mktime(0, 0, 0, date("m") , date("d") - 5, date("Y"))); 

Nhưng, làm thế nào để tìm thấy những gì là 5 ngày trước từ bất kỳ ngày, không chỉ ngày hôm nay?

Ví dụ: 5 ngày trước 2008-12-02 là gì?

Trả lời

83

Tôi nghĩ một cách có thể đọc được để làm điều đó là:

$days_ago = date('Y-m-d', strtotime('-5 days', strtotime('2008-12-02'))); 
+0

Cái này hoạt động hoàn hảo. Cảm ơn! – Yeti

+0

Tôi nghĩ ngày phải là một tham số, như $ dateNow = (new \ DateTime()) -> định dạng ('d-m-Y'); $ daysAgo = date ('d-m-Y', strtotime ('- 5 ngày', strtotime ($ dateNow))); – Limon

+1

Tốt nhất. Cảm ơn – Adi

9
define('SECONDS_PER_DAY', 86400); 
$days_ago = date('Y-m-d', time() - 5 * SECONDS_PER_DAY); 

Ngoài ra, bạn có thể sử dụng strtotime cho ngày bất kỳ:

$days_ago = date('Y-m-d', strtotime('January 18, 2034') - 5 * SECONDS_PER_DAY); 

Hoặc, khi bạn sử dụng, mktime:

$days_ago = date('Y-m-d', mktime(0, 0, 0, 12, 2, 2008) - 5 * SECONDS_PER_DAY); 

Vâng, bạn nhận được nó. Điều quan trọng là để loại bỏ đủ giây từ dấu thời gian.

+0

mát, nhưng tôi có ngày 2008/12/02 bên trong một $ the_date biến. Làm thế nào để đi về nó, trong trường hợp này? – Yeti

+0

@Lost_in_code: bạn đã sử dụng 'strtotime' với nó. – zneak

1

Nếu bạn muốn có một phương pháp mà bạn biết thuật toán, hoặc các chức năng được đề cập trong câu trả lời trước không có sẵn: chuyển đổi ngày tới Số Ngày Julian (là cách đếm ngày từ ngày 1 tháng 1 năm 4713 trước Công nguyên), sau đó trừ năm, sau đó chuyển đổi về ngày theo lịch (năm, tháng, ngày). Nguồn của thuật toán cho hai chuyển đổi là phần 9 của http://www.hermetic.ch/cal_stud/jdn.htm hoặc http://en.wikipedia.org/wiki/Julian_day

3

5 ngày trước từ một ngày cụ thể:

$date = new DateTime('2008-12-02'); 
$date->sub(new DateInterval('P5D')); 
echo $date->format('Y-m-d') . "\n"; 
0

Sử dụng được xây dựng trong các chức năng date_sub và date_add để toán học với số ngày. (Xem http://php.net/manual/en/datetime.sub.php)

Tương tự như câu trả lời Sazzad, nhưng trong phong cách PHP thủ tục,

$date = date_create('2008-12-02'); 
date_sub($date, date_interval_create_from_date_string('5 days')); 
echo date_format($date, 'Y-m-d'); //outputs 2008-11-27 
8

tìm hiểu những gì ngày là 5 ngày trước từ hôm nay trong php

$date = strtotime(date("Y-m-d", strtotime("-5 day"))); 

tìm hiểu những gì ngày là n ngày trước từ hôm nay trong php

$date = strtotime(date("Y-m-d", strtotime("-n day"))); 
Các vấn đề liên quan