Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][POMOCY] Porównanie dat
Forum PHP.pl > Forum > Przedszkole
Krizis
Witam!
Posiadam taki kod php:
  1. <?php
  2. $i=0;
  3. $file = file("admins_simple.ini");
  4.  
  5. $dated = date("d");
  6. $datem = date("m");
  7. $datey = date("Y");
  8.  
  9. foreach($file as $value) {
  10. $i++;
  11. $exp = explode(" ",$value);
  12. $expa = explode("//",$value);
  13. $expdata = explode(".",$expa[1]);
  14. echo $exp[0]."<br />".$exp[1]."<br />".$expdata[0].".".$expdata[1].".".$expdata[2]."<br />";
  15.  
  16. $i = $i-1;
  17.  
  18. $dated2 = date("d", strtotime($expdata[0]));
  19. $datem2 = date("m", strtotime($expdata[1]));
  20. $datey2 = date("Y", strtotime($expdata[2]));
  21.  
  22. if ($datey2 > $datey) {
  23. echo 'YES1';
  24. } elseif (($datey2 == $datey) && ($datem2 > $datem)) {
  25. echo 'YES2';
  26. } elseif (($datey2 == $datey) && ($datem2 == $datem) && ($dated2 > $dated)) {
  27. echo 'YES3';
  28. } else {
  29. echo 'NO';
  30. }
  31. echo '<br /><hr />';
  32. }
  33. ?>

Plik ini z którego pobiera dane:
Cytat
"STEAM_0:0:26461191" "abcdefghijklmn" //30.07.2011
"STEAM_0:0:26461192" "abcdefghijklmn" //30.05.2010
"STEAM_0:0:26461193" "abcdefghijklmn" //31.05.2012
"STEAM_0:0:26461194" "abcdefghijklmn" //24.02.2011
"STEAM_0:0:26461195" "abcdefghijklmn" //02.05.2011
"STEAM_0:0:26461196" "abcdefghijklmn" //05.07.2011

I nie wiem gdzie w kodzie jest błąd ponieważ wyświetla mi:
Cytat
"STEAM_0:0:26461191"
"abcdefghijklmn"
30.07.2011
NO
"STEAM_0:0:26461192"
"abcdefghijklmn"
30.05.2010
NO

"STEAM_0:0:26461193"
"abcdefghijklmn"
31.05.2012
NO

"STEAM_0:0:26461194"
"abcdefghijklmn"
24.02.2011
NO

"STEAM_0:0:26461195"
"abcdefghijklmn"
02.05.2011
NO

"STEAM_0:0:26461196"
"abcdefghijklmn"
05.07.2011
NO

A nie we wszystkich datach powinno być NO

Proszę o szybką pomoc... Pozdrawiam biggrin.gif
peter13135
nie lepiej porównywać datę z uniksowego znacznika czasu ? chyba mnie z tym roboty
thek
Pytanie: po co sprawdzać każdą z części daty, skoro można porównać daty jako całość?
Krizis
Jeżeli ktoś wie jak poprawić to proszę o kod z poprawką ... Bo ja już nie wiem ;/
Fifi209
Cytat(Krizis @ 1.06.2011, 22:09:52 ) *
Jeżeli ktoś wie jak poprawić to proszę o kod z poprawką ... Bo ja już nie wiem ;/

A czytałeś post thek'a? Też mnie zastanawia, dlaczego nie możesz porównać dat jako całości.
peter13135
wrzuć całą datę do strtotime, co zwróci Ci znacznik uniksowy, a następnie porównaj to z time()
Krizis
Miałem to w wersji całej daty i nie działało może ktoś zobaczy i podesłać sprawny kod?

Mógł by ktoś pomóc?!
nekomata
Większość ludzi próbuje użyć narzędzia zwanego mózgiem zanim poprosi o pomoc , na dodatek nie jest to takie trudne jak masz odpowiedź podaną powyżej . Teraz nikt Ci nie powinien dać gotowca bo się o niego prosisz .
(No hard feelings)
Krizis
Próbowałem to pisać w jednej dacie i bawic sie ale nadal wyswietlalo mi NO wiec prosze kogos o gotowca ...
nekomata
Nikt Ci nie pomoże wiesz czemu?Bo nawet nie napisałeś co ten skrypt ma robić , a poza tym skończ się prosić o gotowca i rusz głową.
Rid
Nie wiem co ma robić skrypt ,ale wynik wydaje się byc jak najbardziej prawidłowy.
Proszę ,dowiedzieć jakie zależności powoduje "&&".

  1. ($datey2 == $datey) && ($datem2 > $datem))
  2. true true wynik=true
  3. false false wynik=false
  4. true false wynik=false
  5. false true wynik=false

Czyli dalsze działanie zostanie wykonane jak działania w obu nawiasach zostaną spełnione.
Krizis
Ten skrypt ma sprawdzać plik z wypisany mi adminami na serwerze CSa. I odpowiednio pokazywać czy dany użytkownik ma jeszcze ADMIN'a czy nie według daty. Rid według tego co ty napisałeś powinno działać ale mi kod cały czas wywala wartość NO i nie wiem co jest nie tak ...
nekomata
Jakbyś sobie wyprintował / wyechował daty to może byś doszedł o co chodzi ..... ale ze złośliwości ludzkiej która jest u mnie wrodzona napisze Ci rozwiązanie w taki sposób który możesz mieć problem zrozumieć.
  1. <?php
  2. $file = '"STEAM_0:0:26461191" "abcdefghijklmn" //30.07.2011
  3. "STEAM_0:0:26461192" "abcdefghijklmn" //30.05.2010
  4. "STEAM_0:0:26461193" "abcdefghijklmn" //31.05.2012
  5. "STEAM_0:0:26461194" "abcdefghijklmn" //24.02.2011
  6. "STEAM_0:0:26461195" "abcdefghijklmn" //02.05.2011
  7. "STEAM_0:0:26461196" "abcdefghijklmn" //05.07.2011';
  8. preg_match_all('#"(.*)" "(.*)" //([0-9]{1,})\.([0-9]{1,})\.([0-9]{1,})#',$file,$catched);
  9. /*
  10. Masz 6 tablic teraz w $catched
  11. 0 - cala linia
  12. 1 - steam id
  13. 2 - nick uzytkownika
  14. 3 - dzien daty
  15. 4 - miesiac daty
  16. 5 - rok daty
  17. */
  18. $dzisiaj = strtotime(date('Y-m-d'));
  19. foreach($catched[1] as $key => $value){
  20. echo $catched[2][$key].'('.$value.')';
  21. $data = strtotime($catched[5][$key].'-'.$catched[4][$key].'-'.$catched[3][$key]);
  22. echo ($dzisiaj>$data) ? ' ma ' : 'nie ma';
  23. echo 'admina.<br>';
  24. }
  25. ?>
A teraz już więcej nie proś o rozwiązanie tylko rusz głową.
Krizis
nekomata wielkie dzięki biggrin.gif o tym nie pomyślałem tongue.gif

A mógł by ktoś w tym kodzie:
  1. <?php
  2. $i=0;
  3. $file = file_get_contents("admins_simple.ini");
  4. preg_match_all('#"(.*)" "(.*)" //([0-9]{1,})\.([0-9]{1,})\.([0-9]{1,})#',$file,$catched);
  5. $dzisiaj = strtotime(date('Y-m-d'));
  6.  
  7. foreach($catched[1] as $key => $value) {
  8. $i++;
  9. echo $value.'('.$catched[3][$key].'.'.$catched[4][$key].'.'.$catched[5][$key].')';
  10. $data = strtotime($catched[5][$key].'-'.$catched[4][$key].'-'.$catched[3][$key]);
  11. if ($dzisiaj>$data)
  12. {
  13. echo ' nie ma ';
  14. }
  15. else
  16. {
  17. echo ' ma ';
  18. }
  19. echo 'admina.<br>';
  20. echo '<br /><hr />';
  21. }
  22. ?>


Dodać coś takiego że gdy ktoś nie ma to wywala tą linijkę z pliku?

Plik admins_simple.ini wygląda tak:
Cytat
"STEAM_0:0:26461191" "abcdefghijklmn" //05.06.2010
"STEAM_0:0:26461192" "abcdefghijklmn" //15.10.2010
"STEAM_0:0:26461193" "abcdefghijklmn" //30.07.2011
"STEAM_0:0:26461194" "abcdefghijklmn" //15.10.2010
"STEAM_0:0:26461195" "abcdefghijklmn" //30.07.2011
nekomata
Zacytuje sam siebie
Cytat
A teraz już więcej nie proś o rozwiązanie tylko rusz głową.
A podpowiedź w if'e który mówi 'nie ma' dodaj unset na $catched[0][$key] . szczęśliwy?
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.