spit
17.07.2006, 11:34:20
Cześć
Chcę u siebie na stronie wyświetlić datę z formacie DD.MM.RRRR. W bazie, w polu 'wydanie' (typ: date), jest w formacie RRRR-MM-DD. Gdy chce go sformatowac zwykłą fukncją date, czyli tak:
<?php
date("d.m.Y"$rekord["wydanie"]) ?>
pojawia się data 01.01.1970. Znalazłem funkcję strtotime, i tak jej użyłem:
<?php
?>
. I niby wszystko OK, ale gdy zedytuje wpis, w którym jest data, wszystko wariuje. Z roku 2006 robi się 2022, a daty 1984-00-00 31-11-1983. Co robić?
nospor
17.07.2006, 11:38:48
a $rekord["wydanie"] w jakim jest formacie?
nie wiem czy to literowka, ale:date("d.m.Y"$rekord["wydanie"])
powinno byc (mam na mysli skladnie): date("d.m.Y",$rekord["wydanie"])
edit: wycofuje pierwsze pytanie

edit2: co rozumiesz przez "zedytuje"? gdzie to edytujesz?
Adiasz
17.07.2006, 14:05:55
W bazie trzymasz w postaci Y-m-d a na sajcie wyswietlasz w d-m-Y zeby poprawnie zapisac zmodyfikowana date musisz ja znowu odwrocic
spit
17.07.2006, 14:32:12
zedytuje, np. w phpmyadmine

z ta literowka to faktycznie, dalem przecinka, ale to dlatego, ze szybko pisalem.
@Adiasz:
jak odwrocic? zapisane w bazie? no tego wole nie robic, na wpisie w takim wlasnie formacie opieram sortowanie.
Adiasz
17.07.2006, 15:06:59
Chodzilo mi o to ze jezeli w bazie masz format daty Y-m-d to nie mozesz go prubowac zpisywac w formacie d-m-Y bo mozesz dostac dziwne rezultaty jak powyzej i przed zapisem do bazy trzeba Y z d zamienic. Twoje bledy moga wynikac z tego blednego formatu.
spit
17.07.2006, 15:10:21
Ale to format pola 'date', nie moge go zmieniac jak chce.
thornag
17.07.2006, 17:08:09
Cytat(spit @ 17.07.2006, 11:34 )

Znalazłem funkcję strtotime, i tak jej użyłem:
<?php
?>
.
To dziwne rzeczywiscie
@Adiasz -> popatrz na to z innej strony w $rekord['wydanie'] przechowywana jest data 2006 7 16 pozniej skrypt zamienia ja na timestamp " strtotime($rekord["wydanie"]) ", na koncu zas zamienia timestamp na 16 7 2006, wiec teoretycznie wszystko powinno byc w porzadku.
Nie wiem dlaczego to nie chce dzialac

Moze sprobuj poprostu pole z data ustawic na int13 i zapisywac timestamp zamiast stringowej daty.

Mimo wszystko jak dla mnie wszystko wskazuje na jakis blad przy edycji

Albo strtotime zle zamienia na timestamp. Sprawdz czy skrypt dobrze zamienia timestamp
Pobierz z bazy zamien na timestamp pozniej zamien timestamp spowrotem na format z bazy i zobacz czy jest taka sama data. Pozniej edytuj pole i zrob to samo. Wyciagnij wnioski itp itp
spit
17.07.2006, 17:33:13
Dla mnie to ewidentna wina edycji, tyle że co, phpmyadmin robi błędy? Nie sądze. Dlaczego tak mówie? Gdy normalnie dodaje rekord, wpisuje date (2005-10-12), jest wyświetlana dobrze (12.10.2005), a gdy ten rekord zedytuje (powiedzmy zmienie zawartość pola 'utwory') data zmienia się na jakąś kosmiczną np. z rokiem 2021. Spróbuje się jeszcze pobawić timestampem.
thornag
17.07.2006, 17:36:48
Po edycji przez phpMyAdmin, probowales sprawdzic czy rekord ma prawidlowa date ?
Zedytuj rekord i w phpmyadmin sprawdz czy data jest nadal dobra, jesli nie to znaczy ze to definitywnie wina edycji
Off.. Coz za szerlokowa konkluzja
spit
17.07.2006, 21:37:37
Data oczywiście jest poprawna po edycji. Tylko wyświetlana jest źle.
thornag
17.07.2006, 23:15:48
Tak jak mowilem, ja bym zapisywal w bazie danych timestampy, no ale nie o to chodzi...
Jeszcze jedno pytanie mam. Czy po pobraniu rekordu (edytowanego) jak wyswietlasz date bez zadnych zmian jak strtotime date to jest ona poprawa?
Jak wyszlo testowanie z timestampami, takie same ?
spit
20.07.2006, 11:21:13
A więc doszedłem do tego, iż błędna data wyświetla się tylko wtedy, gdy w dniu lub miesiącu są dwa zera, np. 1994-00-00. Podaje tak wtedy, gdy nie znam dokładnej daty. Nie mogę wstawić XX-XX, a błędnej daty podawać nie chce. Co radzicie?
thornag
20.07.2006, 11:48:36
No raczej zadna funkcja nie jest przygotowana na zerowy dzien i miesiac

Chyba musisz zrezygnowac z takiego zapisu daty. W ogole dziwie sie ze sie MySQL nie pluje o taki typ zapisanej daty.
spit
20.07.2006, 19:28:45
Więc jeżeli nie date, to co? Zależy mi właśnie na tym, by data była w formacie YYYY-MM-DD, i dała się przerabiać, gdyż używam jej w dwóch przypadkach (sortowanie i wyświetlanie informacji).
thornag
20.07.2006, 19:31:44
DLatego najlepszy moim zdaniem jest time stamp. Ustaw pole jako int 13 i zapisuj timestamp do bazy. Szybsze sortowanie a i zrobic z nim mozesz co dusza zapragnie za pomoca funkcji date();
dzobert
20.07.2006, 19:35:42
Ja u siebie zamiasta pola date zrobiłem pole int i wstawiam tam datę, w takim formacie jak chce
spit
20.07.2006, 21:57:14
Cytat(thornag @ 20.07.2006, 18:31 )

DLatego najlepszy moim zdaniem jest time stamp. Ustaw pole jako int 13 i zapisuj timestamp do bazy. Szybsze sortowanie a i zrobic z nim mozesz co dusza zapragnie za pomoca funkcji date();
Tak, tylko jak przekonwertować pole Date na Int? Prz konwersji wszystkie wartości w tym polu się zerują (0000-00-00). Szukanie grubo ponad 300 dat mi się nie usmiecha
thornag
20.07.2006, 22:02:32
Utworz tymczasowa tabele z indeksem i czasem z tabeli pierwszej. Potem SELECT przekonwertuj wszio, wrzuc do tymczasowej. Pozneij zmien typ i powrzucaj ponownie.
spit
23.07.2006, 00:17:44
No ok, ale gdybym chciał dać zamiast dnia czy miesiąca wartość XX, to funkcja 'date' się odzywa, że nie da rady. Da rade to obejść?
thornag
23.07.2006, 12:19:29
Mozesz wstawiac tam zero np, a pozniej jak zamieniasz to funkcja date() wyrzuci Ci defaultowa date unixowa. MOzesz wtedy to sprawdzic strcompare albo czyms i jesli jest defaultowa to olac jesli inna to wyswietlac. Wszystko zalezy od tego do czego Ci potrzebna ta data w formacie XX
spit
23.07.2006, 13:53:45
Chcę wyświetlać datę wydania, w formacie 00.00.0000. Ale często nie można znaleść dokladnej daty, tylko sam rok, badz rok i miesiąc. Wtedy chce wyswietlac XX.XX.0000 czyt XX.00.0000. O to mi chodzi.
cicik
23.07.2006, 19:05:56
Cytat(spit @ 17.07.2006, 16:10 )

Ale to format pola 'date', nie moge go zmieniac jak chce.
polecam zainteresowac sie funkcja date_format w mysqlu
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.