Tomasz
Kiełbowski
Koordynator
projektów
informatycznych -
PLC Doradztwo Inf...
Temat: Porównanie dat.
W zeszłym roku napisałem aplikację w której musiałem wyróżnić wiersze w których data zwrotu była starsza niż dzisiejsza. Wszystko działało do chwili nowego roku.W widoku wszystkich wpisów,wszystkie zalegające zwroty z 2011 nie zostały wyróżnione. Wyróżnienie jest widoczne tylko dla wpisów dla 2012 roku. Nie mogę znaleźć błędu.
$dzis = date("Y-m-d");
$dzis = explode('-', $dzis);
$data_dzis = mktime($dzis[1], $dzis[2], $dzis[0]);
$zwrot = explode('-', $data_zwrotu);
$data_zwrotu2 = mktime($zwrot[1], $zwrot[2], $zwrot[0]);
if (($data_zwrotu2 < $data_dzis) & ($sortowanie_lista_wirt == 'ORDER BY data_zwrotu ASC'))
{
echo'<tr bgcolor="#F5DEB3">';
$klasa_info ='class="info3"';
}
else
{
echo'<tr class="wiersz1">';
$klasa_info ='class="info2"';
}
Pomożecie?
Dawid Rokita CTO picAds.pl
Temat: Porównanie dat.
Może lepiej będzieif ((strtotime($data_zwrotu) < time()) && ($sortowanie_lista_wirt == 'ORDER BY data_zwrotu ASC'))
{
echo'<tr bgcolor="#F5DEB3">';
$klasa_info ='class="info3"';
}
else
{
echo'<tr class="wiersz1">';$klasa_info ='class="info2"';
}
Zrób sobie var_dump'a składowych warunku to zobaczysz dlaczego nie przechodziDawid Rokita edytował(a) ten post dnia 01.02.12 o godzinie 22:40
Adam
Pawliczek
Programista Web
Developer, Devesoft
Software Development
...
Temat: Porównanie dat.
int mktime ( int $godzina , int $minuta , int $sekunda , int $miesiąc , int $dzień , int $rok [, int $letni/zimowy ] )Kiedy następuje taki moment, że nie widzimy oczywistych błędów czy głupot które napisaliśmy, oznacza to że albo czas spać albo na kolejną kawę ;)
Ja tak często mam ;) Siedzę godzinę i nie potrafię znaleźć błędu, po czym okazuje się że np. łączę się ze złą bazą ;)Adam Pawliczek edytował(a) ten post dnia 01.02.12 o godzinie 22:42
Kamil Brenk blog.kamilbrenk.pl
Temat: Porównanie dat.
generalnie widzę, że próbujesz przygotować porównywanie dat do SQLa, więc z mojej strony pytanie - dlaczego by porównywania nie przerzucić na SQL?w sql do sprawdzania dat masz wiele fajnych funkcji:
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-f...
masz też klauzule if
http://dev.mysql.com/doc/refman/5.0/en/if-statement.html
czy case
http://dev.mysql.com/doc/refman/5.0/en/case-statement....
Łukasz
Z.
Programista,
Optiguard
Temat: Porównanie dat.
Tomasz Kiełbowski:
$data_dzis = mktime($dzis[1], $dzis[2], $dzis[0]);
[...]
$data_zwrotu2 = mktime($zwrot[1], $zwrot[2], $zwrot[0]);
Późno jest i oczy mi się kleją, ale te mktime-y wyglądają mi jakoś podejrzanie.
Wg dokumentacji http://www.php.net/manual/pl/function.mktime.php wpisałeś miesiąc w miejsce godziny, dzień w miejsce minut a rok w miejsce sekund. Funkcja mktime przyjęła ponadto domyślnie dzień, miesiąc i rok z aktualnego czasu (argumenty pomija się od prawej do lewej a właśnie z "prawej" strony zapisywana jest data). Pomijam oczywiście oznaczenie czasu letniego i zimowego.
Wg mnie powinieneś spróbować zapisać te mktime-y jako:
mktime(0, 0, 0, $zwrot[1], $zwrot[2], $zwrot[0]);
Ponadto mam jeszcze taką drobną uwagę - zapisywanie warunku typu
$sortowanie_lista_wirt == 'ORDER BY data_zwrotu ASC'
jest moim zdaniem bardzo ryzykowne. Teraz wszystko działa pewnie pięknie, ale w którymś momencie zmienisz gdzieś zapytanie i np. dla czytelności dodasz jakąś spację, a następnie spędzisz kupę czasu na szukaniu błędu. Lepiej jest moim zdaniem używać dodatkowych flag.
Tomasz Zadora extends Human
Temat: Porównanie dat.
Zamiast mktime - http://php.net/strtotime, prościej i przyjemniej.
Piotr Jarolewski flex developer
Temat: Porównanie dat.
Nie lepiej użyć klasy datetime?http://php.net/manual/en/class.datetime.php
I tam wygenerować sobie dwie daty, następnie masz $date->format('U'); który podaje czas w sekundach i na tej podstawie porównywać dwie daty?
Tomasz
Kiełbowski
Koordynator
projektów
informatycznych -
PLC Doradztwo Inf...
Temat: Porównanie dat.
Adam Pawliczek:
int mktime ( int $godzina , int $minuta , int $sekunda , int $miesiąc , int $dzień , int $rok [, int $letni/zimowy ] )
Kiedy następuje taki moment, że nie widzimy oczywistych błędów czy głupot które napisaliśmy, oznacza to że albo czas spać albo na kolejną kawę ;)
Ja tak często mam ;) Siedzę godzinę i nie potrafię znaleźć błędu, po czym okazuje się że np. łączę się ze złą bazą ;)
U mnie raczej głównym powodem jest to że nie jestem programistą. Trudno być specjalistą pisząc jedną niewielką aplikację rocznie :)
Tomasz
Kiełbowski
Koordynator
projektów
informatycznych -
PLC Doradztwo Inf...
Temat: Porównanie dat.
Łukasz Z.:
mktime(0, 0, 0, $zwrot[1], $zwrot[2], $zwrot[0]);
Działa :) Wielkie dzięki! Zrobiłem Twoją metodą ponieważ była najszybsza :).
Z poradami pozostałych kolegów zapoznam się za chwilę.
Konrad
Karpieszuk
tradematik.pl -
wtyczka wordpress
sklep internetowy
Temat: Porównanie dat.
Tomasz Kiełbowski:
$dzis = date("Y-m-d");
$dzis = explode('-', $dzis);
$data_dzis = mktime($dzis[1], $dzis[2], $dzis[0]);
sie rozpisales :) wystarczylo:
$data_dzis = time();
$zwrot = explode('-', $data_zwrotu);
$data_zwrotu2 = mktime($zwrot[1], $zwrot[2], $zwrot[0]);
i tu wystarczylo:
$data_zwrotu2 = strtotime($data_zwrotu);
Paweł
K.
Podróżnik,
fotograf,
programista
Temat: Porównanie dat.
Po co tak kombinować?$today = new DateTime();
/* domyślam się z przykładu, że data zwrotu jest w formacie Y-m-d */
$zwrot = DateTime::createFromFormat("Y-m-d", "2012-02-05");
$interval = $zwrot->diff($today);
if ($interval->format('%R') === "+" && (int) $interval->format('%a') > 0) {
echo 'Data zwrotu jest starsza od daty dzisiejszej';
} else {
echo 'Data zwrotu nie jest starsza od daty dzisiejszej';
}
EDIT: po krótkim przemyśleniu tematu. Da się jeszcze bardziej uprościć: diffa wywalamy, a warunek zapisujemy w postaci:
if ($zwrot->getTimestamp() < $dzis->getTimestamp()) etc.Paweł K. edytował(a) ten post dnia 04.02.12 o godzinie 23:16
