Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Zapis/odczyt daty i godziny ze zmianą formatu
Forum PHP.pl > Forum > Przedszkole
-Mateusz-
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
erix
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
-Mateusz-
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');
erix
A zobacz sobie, jaki format przyjmuje MySQL. Wszystko jest w dokumentacji.
-Mateusz-
Nie prościej byłoby przez CreateFromFormat http://www.php.net/manual/en/datetime.createfromformat.php ?
erix
Eee, ale to chodzi o MySQL. tongue.gif

Poza tym, z takim formatem strtotime sobie radzi bez problemu.
-Mateusz-
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()
erix
Bo to dopiero od ~5.3 jest dostępne.

Ale o co chodzi, przecież strtotime powinno prawidłowo ten format łyknąć.
-Mateusz-
Tak wiem, już o tym wyczytałęm dzisiaj..
Samo:
  1. echo strtotime("26/07/2012 08:27:35");

nic nie zwraca
erix
  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.
-Mateusz-
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!
erix
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.
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.