Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Zapis/odczyt daty i godziny ze zmianą formatu
--Mateusz--
post 26.07.2012, 10:02:18
Post #1





Goście







Witam, w jaki sposób najlepiej zapisywać i odczytywać datę z pola datetime, tak by wyświetlała się ona w formacie:
Kod
22/07/2011 05:23:45
?

Do odczytu mogę albo użyć:
  1. SELECT DATE_FORMAT()
T już w samym zapytaniu do bazy, albo w PHP
  1. $date = date("d/m/Y H:i:s", strtotime($date));


I jeszcze jedno pytanie: jak zapisywać taki datę z takim formatem do bazy, w której data i czas są w formacie: 2012-07-24 12:09:05 ?


Pozdrawiam
Go to the top of the page
+Quote Post
erix
post 26.07.2012, 10:06:00
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Moim zdaniem, lepiej po stronie PHP. Baza i tak ma co robić.

Cytat
I jeszcze jedno pytanie: jak zapisywać taki datę z takim formatem do bazy, w której data i czas są w formacie: 2012-07-24 12:09:05 ?

TIMESTAMP


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
--Mateusz--
post 26.07.2012, 11:07:11
Post #3





Goście







Ok, dzięki za odpowiedź. Co do TIMESTAMP to datę np. 26/07/2012 07:25:45 mam przekonwertować, a później zapisać do bazy?
Jak już pisałem, w bazie danych pole w której przechowuje czas ma typ datetime.

Próbowałem dane z formularza przerobić na TIMESTAMP, jednak takie coś nie działa:
  1. $timestamp = strtotime('26/07/2012 07:25:45');
Go to the top of the page
+Quote Post
erix
post 26.07.2012, 11:10:45
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A zobacz sobie, jaki format przyjmuje MySQL. Wszystko jest w dokumentacji.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
--Mateusz--
post 26.07.2012, 11:35:58
Post #5





Goście







Nie prościej byłoby przez CreateFromFormat http://www.php.net/manual/en/datetime.createfromformat.php ?
Go to the top of the page
+Quote Post
erix
post 26.07.2012, 12:15:27
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Eee, ale to chodzi o MySQL. tongue.gif

Poza tym, z takim formatem strtotime sobie radzi bez problemu.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
--Mateusz--
post 26.07.2012, 13:33:46
Post #7





Goście







Jeśli chodzi Ci o coś takiego jak tu:
  1. $timestamp = '31/05/2001 12:22:56';
  2. $timestamp = date_create_from_format('d/m/Y H:i:s', $timestamp);
  3. echo date_format($timestamp, 'Y-m-d H:i:s');


to niestety na mojej wersji PHP (5.2.17) to nie działa i zwraca Fatal error: Call to undefined function date_create_from_format()
Go to the top of the page
+Quote Post
erix
post 26.07.2012, 13:38:58
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Bo to dopiero od ~5.3 jest dostępne.

Ale o co chodzi, przecież strtotime powinno prawidłowo ten format łyknąć.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
--Mateusz--
post 26.07.2012, 13:44:36
Post #9





Goście







Tak wiem, już o tym wyczytałęm dzisiaj..
Samo:
  1. echo strtotime("26/07/2012 08:27:35");

nic nie zwraca
Go to the top of the page
+Quote Post
erix
post 26.07.2012, 14:04:18
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. $d = '26/07/2012 08:27:35';
  2. $d = sscanf($d, '%d/%d/%d %d:%d:%d');
  3.  
  4. sprintf('%d-%d-%d %d:%d:%d', $d[2], $d[1], $d[0], $d[3], $d[4], $d[5]);

A jak tego użyć, to Twoja praca domowa.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
--Mateusz--
post 26.07.2012, 14:26:35
Post #11





Goście







Dzięki wielkie!

zmieniłem %d na %s, bo w stringu działają zera i ten kodzik działa tak jak chciałem:
  1. $d = '21/07/2012 07:27:35';
  2. $d = sscanf($d, '%02s/%02s/%d %02s:%02s:%02s');
  3.  
  4. echo sprintf('%d-%02s-%02s %02s:%02s:%02s', $d[2], $d[1], $d[0], $d[3], $d[4], $d[5]);

smile.gif

Pozdrawiam!
Go to the top of the page
+Quote Post
erix
post 26.07.2012, 14:55:14
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Wiem, że działają zera, ale bez nich strtotime również zachowuje się ok, z tego, co sprawdziłem, a %d działa dużo szybciej niż %s.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 16.05.2025 - 16:07