Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PostgreSQL]Pola z formatem daty
Forum PHP.pl > Forum > Przedszkole
The Night Shadow
Witam wszystkich,

MySQL znam dość dobrze, ale przyszło mi teraz przesiadać się powoli na PostgreSQL i pojawia mi się parę pytań odnośnie typów danych.

Tworzą tabalę admins dodaję pola:

id (serial)
date_added
date_last_mod
date_last_act
login
password

Pierwsze pole to numer id nadawany z automatu. Trzy kolejne to odpowiednio data dodania, ostatniej modyfikacji i ostatniej aktywności użytkownika.

Załóżmy, że dla daty date_addred wybrałem typ timestamp without time zone i nadałem mu domyslną wartość now().

W polu z datą pojawia mi się data w formacie 2010-01-29 00:05:35.154423

I teraz kilka pytań. Wydawało mi się, że timestamp to ilość sekund, a nie data w konkrentym formacie.

Dlaczego tutaj wyświetla sie to w formie zwykłej daty?

Czy wobec tego wykonując zapytania mam porównywać nie ze znaczniekiem time() z PHP tylko z np. poierz rekordy większe od 2001-00-00 00:00:00.0 żeby pobrać wszystkie najnowsze od 2001 roku?

Co to za końcówka w dacie czyli 154423? To są milisekundy? Czy da się tego pozbyć? Ewentualnie jak się tego pozbyć podczas wyjmowania danych z tabeli?

Jak w tym wypadku wygląda kwestia stref czasowych? Jeżeli w serwis ma być wyświetlany dla ameryki oraz dla europy? Dodaję rekord i aktualnie pojawia mi się dokładnie aktualna godzina w tym polu. Chciałbym żeby dla wyświetlania serwisu np. w USA była wyświetlana data według tamtego schematu. Czy tojest wykonalne bez ręcznego odejmowania / dodawania godzin?
piotrooo89
Cytat(The Night Shadow @ 29.01.2010, 09:52:59 ) *
Dlaczego tutaj wyświetla sie to w formie zwykłej daty?


no to chyba dobrze że zwraca w postaci miłej dla oka.

Cytat(The Night Shadow @ 29.01.2010, 09:52:59 ) *
Czy wobec tego wykonując zapytania mam porównywać nie ze znaczniekiem time() z PHP tylko z np. poierz rekordy większe od 2001-00-00 00:00:00.0 żeby pobrać wszystkie najnowsze od 2001 roku?


postgres pozwala na fajne rzutowanie typów danych.

Cytat(The Night Shadow @ 29.01.2010, 09:52:59 ) *
Co to za końcówka w dacie czyli 154423? To są milisekundy? Czy da się tego pozbyć? Ewentualnie jak się tego pozbyć podczas wyjmowania danych z tabeli?


  1. to_char(DATA, 'YYYY-MM-DD HH24:MI:SS')::timestamp AS DATA


Cytat(The Night Shadow @ 29.01.2010, 09:52:59 ) *
Jak w tym wypadku wygląda kwestia stref czasowych? Jeżeli w serwis ma być wyświetlany dla ameryki oraz dla europy? Dodaję rekord i aktualnie pojawia mi się dokładnie aktualna godzina w tym polu. Chciałbym żeby dla wyświetlania serwisu np. w USA była wyświetlana data według tamtego schematu. Czy tojest wykonalne bez ręcznego odejmowania / dodawania godzin?


wszystko zależy od konfiguracji serwera. możesz ustawić strefę czasową.
The Night Shadow
Super, ale odnośnie strefy czasowej, czy jeżeli użyję time stamp WITH time zone, czy zmiana ustawienia serwera czyli lokalizacji spowoduje pobieranie daty z bazy we właściwej formie?
phpion
Cytat(The Night Shadow @ 29.01.2010, 09:52:59 ) *
Co to za końcówka w dacie czyli 154423? To są milisekundy? Czy da się tego pozbyć? Ewentualnie jak się tego pozbyć podczas wyjmowania danych z tabeli?

Możesz również podczas tworzenia tabeli zdefiniować precyzję dla pola na wartość 0:
  1. timestamp(0) without time zone

Wówczas nie będziesz miał przechowywanych milisekund.
The Night Shadow
Ok, a jak wygląda kwestia tych stref czaoswych? Kiedy daję timestamp with timezone podaje mi kaie coś np. 2010-01-29 00:05:35.154423+1 czyli mówi mi o tym, ze czas serwera to czas +1 (polski). Jeżeli teraz wejdzie sobie uzytkownik z londynu powinno odjąć od tego czasu 1 godzinę itd. Jak ten problem rozwiązać?
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.