Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SF][SF2][Symfony2] Porównanie dat w szablonie TWIG
damianooo
post 27.01.2018, 22:34:09
Post #1





Grupa: Zarejestrowani
Postów: 493
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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 ?

Ten post edytował damianooo 27.01.2018, 22:38:58
Go to the top of the page
+Quote Post
kpt_lucek
post 27.01.2018, 23:10:51
Post #2





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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ę...

Ten post edytował kpt_lucek 27.01.2018, 23:15:24


--------------------


Cytat
There is a Bundle for that
Lukas Kahwe Smith - October 31th, 2014
Go to the top of the page
+Quote Post
damianooo
post 27.01.2018, 23:16:55
Post #3





Grupa: Zarejestrowani
Postów: 493
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
kpt_lucek
post 27.01.2018, 23:22:20
Post #4





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Podpowiedź: Filtr DATE



--------------------


Cytat
There is a Bundle for that
Lukas Kahwe Smith - October 31th, 2014
Go to the top of the page
+Quote Post
damianooo
post 27.01.2018, 23:25:17
Post #5





Grupa: Zarejestrowani
Postów: 493
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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

  1. find_matchday(app.request.get('matchday')).dateFrom|date('d-m-Y')
Go to the top of the page
+Quote Post
kpt_lucek
post 27.01.2018, 23:26:21
Post #6





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  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).


--------------------


Cytat
There is a Bundle for that
Lukas Kahwe Smith - October 31th, 2014
Go to the top of the page
+Quote Post
damianooo
post 27.01.2018, 23:32:59
Post #7





Grupa: Zarejestrowani
Postów: 493
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
kpt_lucek
post 27.01.2018, 23:34:28
Post #8





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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')


--------------------


Cytat
There is a Bundle for that
Lukas Kahwe Smith - October 31th, 2014
Go to the top of the page
+Quote Post
damianooo
post 27.01.2018, 23:41:21
Post #9





Grupa: Zarejestrowani
Postów: 493
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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 !
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 02:38