Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Znajdowanie daty do 30 minut wstecz.
Forum PHP.pl > Forum > Przedszkole
benzulli
Witam.

Mam około 100 wierszów w tabeli, które co chwile się aktualizują (od 1-8 godzin), aktualizacja następuje losowo. Data występuje w takim formacie przy każdym wersie: Apr 08 2014, 01:56:24 CEST.

Moje pytanie - czy da się zrobić, aby php w jakiś sposób wskazał tę datę, która została akurat zawiera czas dodany np. do 30 minut temu? Albo czy da się ustawić te daty w kolejności od najstarszej do najmłodszej bądź na odwrót bez dodawania do bazy SQL? Dodam, że dane pobieram za pomocą cURLa.
_Borys_
Może takie coś przykładowo
  1. if(strtotime('Apr 27 2014, 22:16:24 CEST') >= strtotime('now - 30 minutes'))
  2. {
  3.  
  4. }
benzulli
  1. preg_match('@"top" >(.*?)T</td@', $wyjsciowa, $czas);
  2.  
  3. echo str_replace('+', ' ', $row['name']);
  4.  
  5. $data = str_replace(array('"top" >', '</td'), '', $czas[0]);
  6.  
  7. if(strtotime('$data') >= strtotime('now - 600 minutes'))
  8. {
  9. echo "<br />DZIALA";
  10. }
  11. else echo "<br />nie dziala";


Kiedy do if(strtotime() wrzucę $data (czyli datę) to wtedy wyskakuje błąd (nie dziala), a kiedy wpiszę pobraną datę ręcznie (wcześniej się jej dowiem za pomocą echo $data) to wtedy wszystko gra. Dlaczego tak się dzieje? Usunąłem wszystkie spacje, specjalnie w cudzysłowie wziąłem dla testu i nie było żadnych niepotrzebnych znaków ani spacji (testowałem za pomocą echo), przekopiuje zawartość zmiennej działa, wrzucę zmienną - nie działa. Przykładowa data to: Apr 28 2014, 17:15:44 CEST (i jak ją dam to działa, a jak dam zmienną, która zawiera to samo to nie działa). Proszę o pomoc.
Turson
  1. strtotime('$data')

wróć do podstaw zmiennych w php
benzulli
Kiedy dam bez
  1. ''
też nie działa.

I kiedy także dam jako zmienną ten napis (jako stały) i wstawię ją tam - też nie działa

I kiedy dam
  1. echo strtotime($data);


Też niczego nie wyświetla.
Jedynie działa wtedy, kiedy podam w nawiasach konkretną datę.

Lecz $data jest, gdyż gdy dam echo $data; wtedy wyświetlanie działa (lecz, żeby cały skrypt działał, potrzebuję zmienić ją na ten unixowy czas).
Turson
  1. $data = "2014-04-28";
  2. echo strtotime($data);

co tu niby nie działa ohmy.gif
benzulli
  1. $nejm = '<span style="text-transform:capitalize; font-family:Verdana, sans-serif; font-size:8px:">'.$row['name'].'</span>';
  2.  
  3. $lt = str_replace(array('505050', 'D4C0A1', 'F1E0C6'), array('c1b158', '61bf7a', '61bf7a'), $wyjsciowa);
  4. $las = str_replace('Character Deaths', $nejm, $lt);
  5. $last = str_replace('+', ' ', $las);
  6.  
  7. preg_match('@"top" >(.*?)T</td@', $wyjsciowa, $czas);
  8.  
  9. $data = str_replace(array('"top" >', '</td'), '', $czas[0]);
  10.  
  11. $data2 = "Apr 28 2014, 19:52:31 CEST";
  12.  
  13. if(strtotime($data2) >= strtotime('now - 600 minutes'))
  14. {
  15. echo str_replace('61bf7a', 'ca7a7a', $last);
  16. }
  17. else echo $last;
  18.  
  19. }


Dam datę sztywną w zmiennej - działa.

*****

Dam datę w zmiennej pobieranej z cURLa - nie działa:

  1. $nejm = '<span style="text-transform:capitalize; font-family:Verdana, sans-serif; font-size:8px:">'.$row['name'].'</span>';
  2.  
  3. $lt = str_replace(array('505050', 'D4C0A1', 'F1E0C6'), array('c1b158', '61bf7a', '61bf7a'), $wyjsciowa);
  4. $las = str_replace('Character Deaths', $nejm, $lt);
  5. $last = str_replace('+', ' ', $las);
  6.  
  7. preg_match('@"top" >(.*?)T</td@', $wyjsciowa, $czas);
  8.  
  9. $data = str_replace(array('"top" >', '</td'), '', $czas[0]);
  10.  
  11. if(strtotime($data) >= strtotime('now - 600 minutes'))
  12. {
  13. echo str_replace('61bf7a', 'ca7a7a', $last);
  14. }
  15. else echo $last;
  16.  



echo $data; - działa; echo strtotime($data); - nie działa.

Nie wiem już na prawdę, wszystko wydaje się być dobrze - czy nie można stosować str_replace? Muszę to zastosować, gdyż tylko tak wyciągnę datę.

Dokładnie to wyskakuje, gdy
  1. echo $data;

Apr 28 2014, 15:33:14 CEST

Gdy
  1. echo strtotime($data);
wtedy nic nie wyskakuje.
nospor
Nie: echo $data;
a: var_dump($data);
to przekonasz sie co tak naprawde tam jest - byc moze jakies biale znaki, ktore psują
benzulli
Kod
Apr 11 2014, 23:52:31 CEST

echo $data;

Kod
string(0) "" string(46) "Apr 11 2014, 23:52:31 CEST"

var_dump($data);

Niby jest wszystko w porządku, gdy skopiuje tę datę bezpośrednio w postaci
Kod
Apr 11 2014, 23:52:31 CEST

do instrukcji warunkowej - wtedy wszystko działa (lecz kiedy dam zmienną, która zawiera to samo (z której wpisałem datę) - nie działa
nospor
var_dump wyraznie pokazuje, ze twoja data sklada sie 46 znakow, a sam przyznasz ze "Apr 11 2014, 23:52:31 CEST" nie zawiera 46 znakow, nieprawdaz?
Znaczy to, ze jest tam jeszcze cala masa bialych znakow, ktore psują wszystko. uzyj trim() - moze pomoze
benzulli
Wiem co jest nie tak: w źródle strony zamiast daty pojawiają się znaki specjalne: Apr 13 2014, 17:43:16 CEST (spacje i dwukropki są tak zapisane). Da radę to zmienić za pomocą str_replace?


$spacja = '&a#160;;'; (bez 'a', bo wtedy spacja sie pojawia).
Kod
        
$data = str_replace($spacja, ' ', $dataa);


DZIAŁA, WIELKIE DZIĘKI MISTRZU!
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.