Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Problem z datami
Forum PHP.pl > Forum > Przedszkole
Hpsi
Witam mam pewien problem z datą, tj chodzi tutaj o datę urodzin użytkownika. Zawsze robiłem datę jako w bazie typ int(11) ale teraz to okazało się zawodne do ludzi starszych np maja 50 lat. I wtedy moje rozwiązanie się wali. Dodatkowym problemem jest, że po wpisie daty do bazy mysql: np 1.1.1950 robi się data: 19-01-2038 ; nie wiem skąd takie błędy powychodziły. Podejrzewam, że problemem jest sposób zapisywania daty w bazie przez typ int();
Kod który jest używany do zapisu danych w bazie:

  1. <?php
  2. $this->engine->db->queryf('UPDATE `%t` SET `imie`="%s", `nazwisko`="%s", `telefon`=%u, `siec`="%s", urodziny=%u WHERE `id`=%u', 'users', $d['imie'], $d['nazwisko'], $d['tel1'].$d['tel2'].$d['tel3'], $d['siec'], mktime(0, 0, 0, $d['uMonth'], $d['uDay'], $d['uYear']), $_SESSION['id']);
  3. echo mktime(0, 0, 0, $d['uMonth'], $d['uDay'], $d['uYear']);
  4. ?>


Zaznaczam ze problem jest tylko z osobami po ~40sce ...

Proszę o jakieś pomysły jak to rozwiązać bo ja siedzę już dobre parę godzin i mi pomysły się wykończyły
kallosz
stosuj date w postaci unixowej albo zmien typ pola na tinytext i zapisuj jako format date
Hpsi
a nie ma innego rozwiązania na to by jechać na intach, już tłumaczę dlaczego: to jest powiązane z kikonastoma innymi skryptami i trochę męczące byłoby przerabianie tego w ten sposób
kyno
Do przechowywania dat w mysql służą specjalne typy kolumn takie jak:
http://dev.mysql.com/doc/refman/5.0/en/dat...time-types.html
webdice
Proszę poprawić tytuł tematu, same tagi nie są tytułem.
Hpsi
Cytat(webdice @ 18.09.2008, 07:21:20 ) *
Proszę poprawić tytuł tematu, same tagi nie są tytułem.

Ok zaraz porawie ;-)


Ale ogolnie dobra, przerobie na datetime, i teraz jak mam zrobić wyszukiarke do tego bez zbedenego babrania sie w php, zeby kazde pole w mysql przerabiac tj .

  1. <?php
  2. if((int)$_POST['age'] > 0 && $_POST['age'] <= $_POST['age2'])
  3.                {
  4.                    $queryBase .= ' AND `users`.`urodziny` BETWEEN '.mktime(0, 0, 0, 1, 1, date('Y')-$_POST['age2']).' AND '.mktime(23, 59, 59, 12, 31, date('Y')-$_POST['age']);
  5. }
  6. ?>


tak mam jesli jest na intach a w typie "date" ?
Pilsener
Może to Ci pomoże:
http://www.pear.php.net/package/Date/ - PEAR i klasa Date_Calc - to powinno rozwiązać Twoje problemy, piszą ża obsługuje od 1r. naszej ery do roku 9999.
  1. <?php
  2. require_once 'Date/Calc.php';
  3. $date = Date_CalcdateFormat(17,4,1790,'%A, %e %B %Y');
  4. echo $date;
  5. ?>
Hpsi
Dobra zrobiłem za pomocą typu Date

ale teraz mam problem w jaki sposób w mysqlu przeszukać np robie kryterium od 18 do 22 lat .. i robie sobie zapytanie
  1. <?php
  2. $start =  date('Y-d-m', mktime(0, 0, 0, 1, 1, date('Y')-$_POST['age2']));
  3.                    $koniec =  date('Y-d-m', mktime(23, 59, 59, 12, 31, date('Y')-$_POST['age']));
  4.                    
  5.                    $queryBase .= ' AND `users`.`urodziny` BETWEEN "'.$start.'" AND "'.$koniec.'"';
  6. ?>


i niestety nie wyszukuje mi danych z bazy danych ...
phpion
  1. SELECT * FROM tabela WHERE YEAR(pole_z_data) BETWEEN 1986 AND 1990;
Hpsi
normalnie phpion bym powiedział ze cie kocham smile.gif
dzięki nie pomyślałem o takim rozwiązaniu i caly dzien wyzywałem.

Dzięki wszystkim za pomoc smile.gif a szczegolnie tobie phpion
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.