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). |
|
|
|
![]() |
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 |
|
|
|
WebCM [Data] Formatowanie daty i czasu 18.06.2008, 19:08:00
phpion Ja osobiście wolę stosować pole typu DATETIME zami... 19.06.2008, 06:09:06
nevt zdecydowanie zostań przy typie danych DATETIME. fo... 19.06.2008, 07:17:00
merk Dla pola daty zazwyczaj korzystam z DATETIME lub D... 19.06.2008, 07:23:34
WebCM Można też rozbić datę za pomoc... 19.06.2008, 07:42:37
Pilsener A ja używam daty w postaci uniksowej - przyzwyczai... 19.06.2008, 07:45:21
WebCM Zostańmy jeszcze przy formacie YYYY-MM-DD HH:... 21.06.2008, 16:32:09
nevt przecież pomoc masz jak na dłoni. nie po... 21.06.2008, 23:08:37
WebCM Co z tego, że MySQL oferuje takie funkcje, jeżeli ... 22.06.2008, 16:05:10
Pilsener PHP. Użyj funkcji setlocale i date_default_timezon... 23.06.2008, 07:32:20
dragonsokol int..
zapisujesz czas GMT i dodajesz w sekundach b... 24.06.2008, 00:15:02
Pilsener CytatMoże ustawiam złą lokalizację w setlocale() n... 24.06.2008, 07:40:23
WebCM Problemów ciąg dalszy. Okazuje się, ... 24.06.2008, 19:24:08 ![]() ![]() |
|
Aktualny czas: 1.04.2026 - 15:38 |