Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF][SF2][Symfony2] Porównanie dat w szablonie TWIG
Forum PHP.pl > Forum > PHP > Frameworki
damianooo
Próbuję w szablonie sprawdzić, która z dat jest większa i wychodzą mi dziwne rzeczy.
Nie jestem pewien czy TWIG porównuje sobie faktycznie obiekty dat czy stringi.

Mam taki kod w TWIGU:

  1. {% if 'now'|date('d-m-Y') < find_matchday(app.request.get('matchday')).dateFrom|date('d-m-Y') and 'now'|date('d-m-Y') < find_matchday(app.request.get('matchday')).dateTo|date('d-m-Y') %}
  2. {% set nextMatchday = true %}
  3. {% else %}
  4. {% set nextMatchday = false %}
  5. {% endif %}


zweryfikowałem sobie dumpem co wyświetlają poszczególne części kodu i tak:

  1. {{ dump('now'|date('d-m-Y')) }}
  2. {{ dump(nextMatchday) }}
  3. {{ dump(app.request.get('matchday')) }}
  4. {{ dump(find_matchday(app.request.get('matchday')).dateFrom|date('d-m-Y')) }}
  5. {{ dump(find_matchday(app.request.get('matchday')).dateTo|date('d-m-Y')) }}
  6. {{ dump('now'|date('d-m-Y') < find_matchday(app.request.get('matchday')).dateFrom|date('d-m-Y')) }}
  7. {{ dump('now'|date('d-m-Y') < find_matchday(app.request.get('matchday')).dateTo|date('d-m-Y')) }}


wyniki powyższego:

"27-01-2018"
false
"1"
"05-02-2018"
"11-02-2018"
false
false


jakim cudem zmienna nextMatchday = false ?
data obecna jest większa od dat 5 lutego i 11 lutego ?
kpt_lucek
A zerknij tutaj

Czy aby na pewno obie wartości są instancją \DateTime?

Na przyszłość polecam napisać ArgumentResolver + jakiś model, bo przecież możesz tego używać w wielu miejscach, a controller może "otrzymać" już obrobione i "gotowe" dane do dalszego procesowania.

-- EDIT

Poprawiłem sandbox, co żebyś widział różnicę...
damianooo
no raczej tak

W entity mam tak:

  1. /**
  2.   * @ORM\Column(name="date_from", type="datetime", nullable=true)
  3.   */
  4. private $dateFrom;
  5.  
  6. /**
  7.   * @ORM\Column(name="date_to", type="datetime", nullable=true)
  8.   */
  9. private $dateTo;



Metoda jaką w Twigu pobieram daty do korzystając z klasy AppExtension wygląda tak:


  1. // get matchday by name
  2. public function getMatchdayByName($name){
  3. $repository = $this->doctrine->getRepository('AppBundle:Matchday');
  4. $matchday = $repository->findOneByName($name);
  5.  
  6. return $matchday;
  7. }
kpt_lucek
Podpowiedź: Filtr DATE

damianooo
ale chyba tak mam.
jest filtr date na obu datach :

  1. find_matchday(app.request.get('matchday')).dateFrom|date('d-m-Y')
kpt_lucek
  1. 'now'|date('d-m-Y') < find_matchday(app.request.get('matchday')).dateFrom|date('d-m-Y')


A teraz zobacz co wypluwa każdy z w/w poprzez dump'a, a potem popatrz na moją pierwszą odpowiedź (pierwszy link).
damianooo
poczekaj bo się pogubiłem.

Mój obecny kod wypluwa to co napisałem w pierwszym poście a więc to:

"27-01-2018"
false
"1"
"05-02-2018"
"11-02-2018"
false
false

Twój link z pierwszego postu pokazuje wyniki przed konwersją i po konwersji w PHPie i widzę że jak porównuje stringi to jest FLASE a jak daty to prawidłowo a więc TRUE .

Sugerujesz zatem że w TWIG mam stringi i dlatego mi to źle działa i że powinienem to skonwertować sobie w PHPie w tej funkcji w klasie AppExtension ?
kpt_lucek
Nic ani nikt nie broni Ci operować na dacie w Twig'u, ale Ty w owym przypadku operujesz na stringach, bo formatujesz datę używając |date('d-m-y')
damianooo
ok już rozumiem .. usunąłem te filtry i działa

"now"
true
"1"
DateTime {#452 ▼
+"date": "2018-02-05 00:00:00.000000"
+"timezone_type": 3
+"timezone": "Europe/Berlin"
}
DateTime {#453 ▼
+"date": "2018-02-11 00:00:00.000000"
+"timezone_type": 3
+"timezone": "Europe/Berlin"
}
true
true


dzięki !
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.