Stwórz profil

Musisz wpisać swoje imię
Musisz wpisać swoje nazwisko
Musisz wpisać poprawny e-mail
Musisz wpisać hasło (min. 8 znaków)
Musisz zaakceptować regulamin

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?
1.02.2012, 22:34

Dawid Rokita CTO picAds.pl

Temat: Porównanie dat.

Może lepiej będzie

if ((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
1.02.2012, 22:39

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
1.02.2012, 22:41

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....
1.02.2012, 22:49

Ł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.
1.02.2012, 23:09

Tomasz Zadora extends Human

Temat: Porównanie dat.

Zamiast mktime - http://php.net/strtotime, prościej i przyjemniej.
2.02.2012, 00:05

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?
2.02.2012, 08:13

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 :)
2.02.2012, 21:16

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ę.
2.02.2012, 21:23

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);
3.02.2012, 01:40

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
4.02.2012, 23:05



Wyślij zaproszenie do