2010-04-25 17 views
41

Dobrze, następujące powraca co dzień wynosił 5 dni temu:Jak dowiedzieć się, jaka była data 5 dni temu?

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

Ale jak znajdę to, co było 5 dni temu od dowolną datę, nie tylko dzisiaj?

Na przykład: co było 5 dni przed 2008-12-02?

Odpowiedz

83

myślę, że czytelny sposób z tym, że jest:

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

Ten działa idealnie. Dzięki! – Yeti

+0

Myślę, że data powinna być parametrem, jak $ dateNow = (nowy \ DateTime()) -> format ("d-m-Y"); $ daysAgo = data ("d-m-Y", strtotime ("- 5 dni", strtotime ($ dateNow))); – Limon

+1

Dobra. Dzięki – Adi

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

Poza tym, można użyć strtotime dla dowolnej daty:

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

Albo, jak kiedyś, mktime:

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

dobrze, je dostać. Kluczem jest usunięcie wystarczającej liczby sekund ze znacznika czasu.

+0

cool, ale mam datę 2008-12-02 wewnątrz zmiennej $ the_date. Jak to zrobić, w tym przypadku? – Yeti

+0

@Lost_in_code: użyłbyś w tym celu 'strtotime'. – zneak

1

Jeśli chcesz sposób, w którym znasz algorytmu lub funkcji wymienionych w poprzedniej odpowiedzi nie są dostępne: konwertować datę do Numer dnia w języku juliańskim (który jest sposobem liczenia dni od 1 stycznia 4713 pne), następnie odejmuj pięć, a następnie przelicz z powrotem na datę kalendarzową (rok, miesiąc, dzień). Źródła algorytmy dla dwóch konwersji jest sekcja 9 http://www.hermetic.ch/cal_stud/jdn.htm lub http://en.wikipedia.org/wiki/Julian_day

3

5 dni temu od określonej daty:

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

Użyj wbudowanej funkcji date_sub i DATE_ADD do matematyki z datami. (Patrz http://php.net/manual/en/datetime.sub.php)

Podobne do odpowiedzi Sazzad, ale w stylu proceduralnym 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 
8

dowiedzieć się, jaka data była 5 dni temu od dzisiaj w php

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

dowiedzieć się, jaka data była n dni temu od dzisiaj w php

$date = strtotime(date("Y-m-d", strtotime("-n day"))); 
Powiązane problemy