Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Data] Formatowanie daty i czasu, DATETIME? Timestamp? Strefy czasowe.
WebCM
post
Post #1





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


Aktualnie przechowuję datę w formacie datetime w MySQL bądź SQLite. Jest jednak problem. Data jest sztywna - przystosowana tylko dla 1 strefy czasowej.

Funkcja formatująca datę:
http://www.unit1.pl/pb-806

1. Datę można przechowywać jako timestamp. Wtedy w PHP formatujemy ją za pomocą strftime() lub date(), podając znacznik czasu jako drugi parametr.

2. Jeśli news został napisany dzisiaj, zamiast daty powinien wyświetlić się napis "Dzisiaj". W przypadku użycia timestamp raczej nie będzie to łatwe. Gdy datę przechowujemy jako datetime - odsyłam do kodu (link wyżej). (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Zależy mi przede wszystkim na wydajności odczytu i formatowania daty i czasu. Co możecie doradzić?

PS. Pamiętajcie, że czasem czas jest zbędny (ważna tylko data).
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
WebCM
post
Post #2





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


Na strftime() lub date() ze znacznikiem czasowym pomaga tylko date_default_timezone_set(). Może ustawiam złą lokalizację w setlocale() na localhost (WinXP)? Wracając do formatowania daty - potrzebuję wskazówek. W tym przypadku wydajność jest istotna. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Szczególnie, gdy trzeba wygenerować N dat.

Podsumowując:
1. Czy konieczna jest zamiana daty na timestamp?
2. Jak przechowywać datę w bazie, aby osiągnąć najlepszą wydajność? INT czy DATETIME? Martwić się o 2038?
3. Formatować datę po stronie PHP czy SQL?

Efekty, które muszę uzyskać:
1. "5 minut temu"
2. Data we właściwej strefie czasowej (ustawionej przez użytkownika)
3. "23.05.2008, 12:23" (jeśli ustawiono taki format daty), opcjonalnie: "23 May 2008 o 12:23"
4. "Dzisiaj o 12:23"

Skrypt obsługuje bazy SQLite i MySQL. Aby formatować datę po stronie bazy, prawdopodobnie muszę tworzyć przy połączeniu (lub na żądanie) funkcję do tego celu - osobno dla każdego z tych silników.

Wykonałem pomiar szybkości odczytu rekordów z datą zawierającą się w określonym przedziale czasu. http://www.unit1.pl/pb-817

Różnica jest prawie niezauważalna, jednak pola INT nieznacznie wygrywają. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Gdybyśmy jednak chcieli wyświetlić wszystkie rekordy dodane w roku 2008 lub w maju 2007 - z użyciem funkcji MONTH(), której brakuje w SQLite, pewnie wygrałby typ DATETIME. Można też wygenerować znaczniki czasu dla tych 2 punktów w PHP (godz. 0:00 GMT, 1 stycznia) - gmmktime() lub pochodna.

PHP opiera się głównie o znaczniki czasu, a nie YYYY-MM-DD. (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Funkcje typu strtotime() pełnią rolę pomocniczą.

Ten post edytował WebCM 23.06.2008, 23:33:05
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 9.10.2025 - 07:54