Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][POMOCY] Porównanie dat
Krizis
post 1.06.2011, 19:35:56
Post #1





Grupa: Zarejestrowani
Postów: 49
Pomógł: 1
Dołączył: 27.07.2008

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
peter13135
post 1.06.2011, 20:07:56
Post #2





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


nie lepiej porównywać datę z uniksowego znacznika czasu ? chyba mnie z tym roboty


--------------------
:)
Go to the top of the page
+Quote Post
thek
post 1.06.2011, 20:10:23
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Pytanie: po co sprawdzać każdą z części daty, skoro można porównać daty jako całość?


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Krizis
post 1.06.2011, 21:09:52
Post #4





Grupa: Zarejestrowani
Postów: 49
Pomógł: 1
Dołączył: 27.07.2008

Ostrzeżenie: (0%)
-----


Jeżeli ktoś wie jak poprawić to proszę o kod z poprawką ... Bo ja już nie wiem ;/
Go to the top of the page
+Quote Post
Fifi209
post 1.06.2011, 21:10:28
Post #5





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
peter13135
post 1.06.2011, 21:27:30
Post #6





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


wrzuć całą datę do strtotime, co zwróci Ci znacznik uniksowy, a następnie porównaj to z time()


--------------------
:)
Go to the top of the page
+Quote Post
Krizis
post 2.06.2011, 19:01:32
Post #7





Grupa: Zarejestrowani
Postów: 49
Pomógł: 1
Dołączył: 27.07.2008

Ostrzeżenie: (0%)
-----


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?!
Go to the top of the page
+Quote Post
nekomata
post 2.06.2011, 20:19:56
Post #8





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post
Krizis
post 2.06.2011, 20:47:20
Post #9





Grupa: Zarejestrowani
Postów: 49
Pomógł: 1
Dołączył: 27.07.2008

Ostrzeżenie: (0%)
-----


Próbowałem to pisać w jednej dacie i bawic sie ale nadal wyswietlalo mi NO wiec prosze kogos o gotowca ...
Go to the top of the page
+Quote Post
nekomata
post 3.06.2011, 00:39:50
Post #10





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

Ostrzeżenie: (0%)
-----


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ą.

Ten post edytował nekomata 3.06.2011, 00:40:09
Go to the top of the page
+Quote Post
Rid
post 3.06.2011, 01:19:24
Post #11





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Rid 3.06.2011, 01:21:49
Go to the top of the page
+Quote Post
Krizis
post 3.06.2011, 04:44:15
Post #12





Grupa: Zarejestrowani
Postów: 49
Pomógł: 1
Dołączył: 27.07.2008

Ostrzeżenie: (0%)
-----


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 ...

Ten post edytował Krizis 3.06.2011, 04:45:08
Go to the top of the page
+Quote Post
nekomata
post 3.06.2011, 19:08:13
Post #13





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

Ostrzeżenie: (0%)
-----


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ą.
Go to the top of the page
+Quote Post
Krizis
post 3.06.2011, 20:20:12
Post #14





Grupa: Zarejestrowani
Postów: 49
Pomógł: 1
Dołączył: 27.07.2008

Ostrzeżenie: (0%)
-----


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


Ten post edytował Krizis 3.06.2011, 20:21:24
Go to the top of the page
+Quote Post
nekomata
post 3.06.2011, 22:46:44
Post #15





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.06.2025 - 17:35