[PHP] Porównanie dat


(felixik) #1

Witam, tworzę stronę internetową i zależałoby mi na tym aby logo zmieniało się automatycznie zależnie od pory roku. Naskrobałem coś takiego:

$wiosna = new DateTime("2013-03-21 00:00:00");

$lato = new DateTime("2013-06-22 00:00:00");

$jesien = new DateTime("2013-09-23 00:00:00");

$zima = new DateTime("2013-12-22 00:00:00");

$dzis = date ("Y-m-d H:i:s");

if ($dzis < $wiosna && $dzis > $zima) { echo ''; }

if ($dzis < $lato && $dzis > $wiosna) { echo ''; }

if ($dzis < $jesien && $dzis > $lato) { echo ''; }

if ($dzis < $zima && $dzis > $jesien) { echo ''; }[/code]

ale powyższy twór nie działa. Czy zna ktoś sposób na wykonanie takiej operacji. Jeśli zna ktoś sposób na js i byłby w stanie wyjaśnić mi to łopatologicznie to chętnie zapoznam się z poradami.

Z góry dziękuję za pomoc


(Pablo_Wawa) #2

http://php.net/manual/pl/function.strcmp.php


(Copycona) #3
var_dump($zima);var_dump($dzis); [/code]
[quote]
object(DateTime)#4 (3) {
  ["date"]=
  string(19) "2013-12-22 00:00:00"
  ["timezone_type"]=
  int(3)
  ["timezone"]=
  string(3) "UTC"
}
string(19) "2013-03-10 23:21:45"
[/quote]

W "porach roku" masz obiekty danej klasy, a "dzis" natomiast to zwykły string. Dziwne jest porównywanie tego.

Prostując to:
http://php.net/manual/pl/datetime.construct.php - Brak parametru oznacza "teraz". Dla dziś także wywołamy instancję tej klasy.
http://php.net/manual/pl/datetime.diff.php - "Przykład #2 DateTime object comparison" - więc obiekty tej klasy można tak porównywać jak Ty chcesz.

Tylko jeszcze jedna uwaga - potrzebujesz dwie daty na zimę - tą która rozpoczęła się w roku poprzednim, i tą która zacznie się w tym roku.

Dodając jeszcze rok uzyskany przez funkcję, zamiast wbity w kod, mamy coś podobnego jak Ty podałeś:
[code=php]?php= date("Y");$wiosna = new DateTime($rok."-03-21 00:00:00");$lato   = new DateTime($rok."-06-22 00:00:00");$jesien = new DateTime($rok."-09-23 00:00:00");$zima   = new DateTime(($rok-1)."-12-22 00:00:00");$zima2  = new DateTime($rok."-12-22 00:00:00");$dzis   = new DateTime();