2012-03-29 8 views
5

Mój dzielony pakiet hostingowy na 1and1 zawiera tylko PHP 5.2.17 - więc nie mogę użyć obiektu DateTime. Bardzo irytujące!Dodawanie X tygodni do daty przy użyciu PHP 5.2

Obecnie ten kod

$eventDate = new DateTime('2013-03-16'); // START DATE 
$finishDate = $eventDate->add(new DateInterval('P'.$profile["Weeks"].'W')); 

Ale oczywiście to nie będzie działać.

Jak mogę zrobić to samo z kodem, który będzie działał z PHP5.2? (Kod dodaje X liczba tygodni w danym dniu).

Odpowiedz

11

Po prostu znacznik czasu z strtotime() i dodać x * sekund od tygodnia

$newTime = strtotime('2013-03-16') + ($numberOfWeeks * 60 * 60 * 24 * 7); // 604800 seconds 

lub co właśnie dowiedziałem:

$newTime = strtotime('+'.$numberOfWeeks.' weeks', strtotime('2013-03-16')); 

Alternatywnie można wykorzystać klasę DateTime. Użyj metody modify zmienić datę (jak w strtotime):

$d = new DateTime('2013-03-16'); 
$d->modify('+'.$numberOfWeeks.' weeks'); 
+1

'strtotime()' przynosi więcej problemów, niż się wydaje. Użyj funkcji klasy "DateTime", aby uniknąć dziwnych błędów podczas obliczania okresów i nigdy nie przegapisz ani sekundy. –

+0

@Paul Masz świadomość, że chodzi o brakujące 'DateInterval' w PHP 5.2? Oczywiście zawsze jest inna odpowiedź. –

+0

A co z ['DateTime :: modify()'] (http://www.php.net/manual/en/datetime.modify.php), które pochodzi z _PHP 5.2.0_? Działa również z wartościami dodatnimi i ujemnymi. Zaledwie kilka dni temu poprawiłem błąd w moim własnym produkcie. Obliczałem przedział przez różnicę znaczników czasu i na marginesie 2 (październik-listopad) miesięcy traciłem 2 tygodnie. Poprawiono implementację "DateTime" i to wszystko. –

3

Można użyć obiektu DateTime w PHP 5.2, to po prostu dodać metodę, która została dodana w PHP 5.3. Możesz użyć the modify method w PHP 5.2.

$finishDate = $eventDate->modify('+'.$profile["Weeks"].' weeks'); 

Należy pamiętać, że spowoduje to modyfikację obiektu, w którym wykonywana jest operacja. Więc $ eventDate również zostanie zmienione.