2011-12-22 16 views
18

Klasa DateTime z pewnymi przydatnymi metodami wydaje się ogólnie lepsza od natywnych funkcji daty php, takich jak strtotime, mktime i strftime (i więcej). Ale czy jest jakaś wada lub powód, dla którego nie powinienem jej używać?Klasa DateTime vs. natywne funkcje daty PHP

Jedynym powodem, dla którego mogę myśleć, jest to, że stworzenie instancji klasy może być droższe niż użycie samej funkcji.

  • Zgodziłbyś się z tym?
  • Czy ma to dla nas jakiś sens obiekt DateTime dla prostych rzeczy?
  • Czy są jakieś inne wady?

Wydaje się nieco mylące, aby przełączać się między tymi dwoma opcjami przez cały czas, więc chciałbym mieć odprawę, co wolałbym robić.

Dwa przykłady mojej decyzji byłoby:

  • Konwersja daty do zlokalizowanego wartości
  • Obliczanie czasu pomiędzy dwiema datami

Odpowiedz

36

Jeśli zmartwieniem jest to, że tworząc instancję klasy jest drogie, a to przeszkadza w osiągach, więc obawiam się, że szczekasz na niewłaściwe drzewo. Nigdy nie należy zastanawiać się, czy zastosować sprawdzone podejście typu OO tam, gdzie ma to sens. Jeśli ma sens używanie klasy DateTime w celu wykonania określonych obliczeń daty, użyj go. To nie jest drogie do punktu, w którym Twoja aplikacja to poczuje, chyba że zrobisz coś szalonego, na przykład stworzysz milion obiektów DateTime.

Powodem, dla którego funkcja DateTime jest świetna, jest fakt, że łagodzi ona problem związany z redukcją czasu letniego, określając strefę czasową podczas tworzenia obiektu. Łatwo też uzyskać różnice między datami lub uzyskać odstępy między różnymi obiektami. Zasadniczo ogranicza ilość niepokoju i kodowania (ale przyznaję, że czasami jest źle, mam nadzieję, że zostanie zaadresowany w wersji 5.4 PHP).

Dolna linia - zawsze go używam.

+5

oraz zakres dat, nawet w 32-bitowym środowisku PHP, wystarczą, aby paleobiolog lub kosmolog, studiując początek lub koniec wszechświata, byli zadowoleni –

+0

Widzę "poręczność" DateTime, ale użyłbyś również to dla prostych rzeczy, takich jak te, które właśnie dodałem do mojego pytania? – Anonymous

+4

Ja bym, ponieważ użyjemy funkcji 'mktime' lub' strtotime' - wymagają one określonej kolejności parametrów reprezentujących dzień, rok, miesiąc, godzinę itd. Z 'DateTime' mogę utworzyć obiekt przy użyciu dowolnych parametrów, takich jak' $ date = DateTime :: createFromFormat ('m H: s D-Y', $ weird_user_input); 'który może być sformatowany do uniksowego znacznika czasu lub dowolnego innego pożądanego formatu daty. Mogę nawet określić strefę czasową natychmiast podczas tworzenia obiektu. Więc tak, zdecydowanie użyłbym go, ponieważ nie widzę, gdzie sposób proceduralny mógłby mi pomóc lepiej. –