2010-04-25 3 views
41

Ну, следующие возвращает то, что дата была 5 дней назад:Как узнать, какая дата была 5 дней назад?

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

Но, как я считаю, что было 5 дней назад от любой даты, а не только на сегодняшний день?

Например: Что было за 5 дней до 2008-12-02?

ответ

83

Я думаю читаемый способ сделать это:

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

Это прекрасно работает. Благодаря! – Yeti

+0

Я думаю, что дата должна быть параметром, например $ dateNow = (new \ DateTime()) -> format ('d-m-Y'); $ daysAgo = date ('d-m-Y', strtotime ('- 5 дней', strtotime ($ dateNow))); – Limon

+1

Хороший. Спасибо – Adi

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

Кроме этого, вы можете использовать strtotime на любую дату:

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

Или, как вы использовали, указываете ей:

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

Ну, вы его получите. Ключ должен удалить достаточное количество секунд из метки времени.

+0

Прикольно, но у меня есть дата 2008-12-02 внутри переменной $ the_date. Как это сделать, в этом случае? – Yeti

+0

@Lost_in_code: вы бы использовали 'strtotime'. – zneak

1

Если вы хотите метод, в котором вы знаете, алгоритм, или функция, упомянутая в предыдущем ответе не доступна: преобразовать дату в Юлианский день (который является способом подсчета дней с 1 января, 4713 г. до н.э.), затем вычесть пять, а затем конвертировать обратно в календарную дату (год, месяц, день). Источники алгоритмов для двух преобразований является раздел 9 из http://www.hermetic.ch/cal_stud/jdn.htm или http://en.wikipedia.org/wiki/Julian_day

3

5 дней назад от конкретной даты:

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

С помощью встроенного в DATE_SUB и DATE_ADD функций математики с датами. (См http://php.net/manual/en/datetime.sub.php)

Подобно ответ Sazzad, но в процедурном стиле PHP,

$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 
0

Общие алгоритмы даты манипуляции преобразования даты и из дня Julian чисел. Вот ссылка на описание таких алгоритмов, описание лучших алгоритмов в настоящее время известно, и математические доказательства каждого из них: http://web.archive.org/web/20140910060704/http://mysite.verizon.net/aesir_research/date/date0.htm

8

узнать, что эта дата была 5 дней назад с сегодняшнего дня в PHP

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

узнать, что эта дата была п дней назад с сегодняшнего дня в PHP

$date = strtotime(date("Y-m-d", strtotime("-n day"))); 
Смежные вопросы