Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Problem z funkcją 'strtotime'
spit
post
Post #1





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 1.08.2005

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


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:
  1. <?php
  2. date("d.m.Y"$rekord["wydanie"])
  3. ?>
pojawia się data 01.01.1970. Znalazłem funkcję strtotime, i tak jej użyłem:
  1. <?php
  2. date("d.m.Y", strtotime($rekord["wydanie"]))
  3. ?>
. 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ć?
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

edit2: co rozumiesz przez "zedytuje"? gdzie to edytujesz?
Go to the top of the page
+Quote Post
Adiasz
post
Post #3





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 28.02.2004

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


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
Go to the top of the page
+Quote Post
spit
post
Post #4





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 1.08.2005

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


zedytuje, np. w phpmyadmine (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
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.

Ten post edytował spit 17.07.2006, 14:33:35
Go to the top of the page
+Quote Post
Adiasz
post
Post #5





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 28.02.2004

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


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.
Go to the top of the page
+Quote Post
spit
post
Post #6





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 1.08.2005

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


Ale to format pola 'date', nie moge go zmieniac jak chce.
Go to the top of the page
+Quote Post
thornag
post
Post #7





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


Cytat(spit @ 17.07.2006, 11:34 ) *
Znalazłem funkcję strtotime, i tak jej użyłem:
  1. <?php
  2. date("d.m.Y", strtotime($rekord["wydanie"]))
  3. ?>
.


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Moze sprobuj poprostu pole z data ustawic na int13 i zapisywac timestamp zamiast stringowej daty. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Mimo wszystko jak dla mnie wszystko wskazuje na jakis blad przy edycji (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Albo strtotime zle zamienia na timestamp. Sprawdz czy skrypt dobrze zamienia timestamp (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował thornag 17.07.2006, 17:14:10
Go to the top of the page
+Quote Post
spit
post
Post #8





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 1.08.2005

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


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.
Go to the top of the page
+Quote Post
thornag
post
Post #9





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Off.. Coz za szerlokowa konkluzja (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
spit
post
Post #10





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 1.08.2005

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


Data oczywiście jest poprawna po edycji. Tylko wyświetlana jest źle.
Go to the top of the page
+Quote Post
thornag
post
Post #11





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


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 ?
Go to the top of the page
+Quote Post
spit
post
Post #12





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 1.08.2005

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


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?
Go to the top of the page
+Quote Post
thornag
post
Post #13





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


No raczej zadna funkcja nie jest przygotowana na zerowy dzien i miesiac (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Chyba musisz zrezygnowac z takiego zapisu daty. W ogole dziwie sie ze sie MySQL nie pluje o taki typ zapisanej daty.

Ten post edytował thornag 20.07.2006, 11:48:51
Go to the top of the page
+Quote Post
spit
post
Post #14





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 1.08.2005

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


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).
Go to the top of the page
+Quote Post
thornag
post
Post #15





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


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();
Go to the top of the page
+Quote Post
dzobert
post
Post #16





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 30.06.2006
Skąd: okolice Warszawy

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


Ja u siebie zamiasta pola date zrobiłem pole int i wstawiam tam datę, w takim formacie jak chce
Go to the top of the page
+Quote Post
spit
post
Post #17





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 1.08.2005

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


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
thornag
post
Post #18





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


Utworz tymczasowa tabele z indeksem i czasem z tabeli pierwszej. Potem SELECT przekonwertuj wszio, wrzuc do tymczasowej. Pozneij zmien typ i powrzucaj ponownie.
Go to the top of the page
+Quote Post
spit
post
Post #19





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 1.08.2005

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


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ść?
Go to the top of the page
+Quote Post
thornag
post
Post #20





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


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
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 23.08.2025 - 05:23