Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z datą
Forum PHP.pl > Forum > PHP
pyrek
witam !

mam mały proiblem a mianowicie w bazie mam tabele o wartości data rrrr-mm-dd
i tak mam dodany wpis gdzie te pole ma wartość:
2005-01-02
i musze zrobić coś takiego. że skrypt szuka wszystkie wpisy gdzie do tej daty zostało mniej niż 30 dni.

Jeśli jest ic mniej niż 30 towywala mi jakiś komunikat że upływa termin itd.

Jak to zrobiś ?
szukałem ale nic nie moge znaleźć odnoścnie tego problemu!
SongoQ
Uzyj +/- interval x [dzien, miesiac, rok]
AndyPSV
Użyj takiego zapytania (przykład oparty na bazie danych - MySQL):

$date = date("D-M-Y");
// ..
// zrobic tak, aby obliczyc ilosc dni od tej daty...

SELECT `id`, `pole`
FROM `tabela`
WHERE `pole` LIKE '%$date%' => '".$date2."

A o tym jak obliczyc date to musisz dojsc sam, bo to juz jest matematyka wyzsza smile.gif.

---

aleksander
NuLL
  1. SELECT *
  2. FROM tabela WHERE UNIX_TIMESTAMP(date) BETWEEN UNIX_TIMESTAMP('JAKAS DATA') AND UNIX_TIMESTAMP('INNA DATA')
rogrog
Cytat(NuLL @ 2005-02-09 19:56:35)
  1. SELECT *
  2. FROM tabela WHERE UNIX_TIMESTAMP(date) BETWEEN UNIX_TIMESTAMP('JAKAS DATA') AND UNIX_TIMESTAMP('INNA DATA')

  1. SELECT *
  2. FROM tabela WHERE date BETWEEN 'JAKAS DATA' AND 'INNA DATA'


tak też może być - konwertowanie do timestampów nie jest konieczne
pyrek
właśnie z tym sprawdzeniem daty mam problem ponieważ nie wiem jak to zrobic.
Oczywiste jest że jak mam date:
$data_x = 2005-02-20
$data_y = 2005-01-12

i od daty x odejme 30dni np. tak
$data_x - $data_y = $data_z to wychodzą mi jakieś cherezje(wiem że źle robie ale nie wiem jak to rozwiązać)

potem chyba powinienem zrobiś coś takiego:

if($data_z<30){echo"zbliża się termin";}
AndyPSV
  1. <?php
  2.             // DEAD DATE after registration => + 7 days
  3.             $d = date(&#092;"d\");
  4.             $m = date(&#092;"m\");
  5.             $Y = date(&#092;"Y\");
  6.             
  7.             if($d <= 23) {
  8.                 $d += 7;
  9.             } else {
  10.                 $d += 7;
  11.                 if($d > 30) {
  12.                     if($m == 12) {
  13.                         $m = &#092;"01\";
  14.                     } else {
  15.                         $m += 1;
  16.                     }
  17.                     $d = $d - 30;
  18.                 }
  19.             }
  20.             
  21. ?>


Spójrz sobie na powyższy kod, a wszystko będzie jasne...


P.S. Jak ty chcesz odjac:
$data_x = 2005-02-20
$data_y = 2005-01-12
Te dwie daty ?

Moze bys je podzielil na rok - miesiac - dzien ?
Polecam uzyc do tego funkcji substr()" title="Zobacz w manualu PHP" target="_manual lub explode()" title="Zobacz w manualu PHP" target="_manual
NuLL
@AndyPSV - po co wy się z tym tak męczycie - nie łatwiej unix'owym znacznikime czasu - miliard razy łatwiej i szybciej,
AndyPSV
  1. SELECT *
  2. FROM tabela WHERE UNIX_TIMESTAMP(date) BETWEEN UNIX_TIMESTAMP('JAKAS DATA') AND UNIX_TIMESTAMP('INNA DATA')


Ale ta date chyba trzeba jakas podac ?
Przeczytaj sobie #post 1.
SongoQ
@AndyPSV Nie rozumiem dlaczego chcesz wykorzystac kod php do obliczenia daty jak wszystko mozesz zrobić na bazie danych. Po to powstaly bazy danych zeby na nich takie operacje robic.

Nie potrzeba tez uzywania BETWEEN bo musisz znac zakresy dat.

Najłatwiej jest w ten sposób zrobić:

  1. SELECT *
  2. FROM t WHERE DATA >= NOW( ) - INTERVAL 30 DAY
NuLL
@AndyPSV - odrazu powinniście zacząć pisać o timestampie, date itp - Przecież z timestampa mozna w php przejsc na dowolny format a wszystko jest łatwiejsze.
rogrog
  1. SELECT *
  2. FROM t WHERE DATA BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
sobstel
ja ze swojej strony zaproponuje takie cos :

  1. SELECT *
  2. FROM t WHERE DATA > DATE_SUB(NOW(), INTERVAL 30 DAY)


albo

  1. SELECT *
  2. FROM t WHERE DATA > SUBDATE(NOW(), 30)


chociaz lepiej by bylo w tym pierwszym umiescic 1 MONTH bo chyba o to chodzi
SongoQ
No i ładnie mamy juz 3 rozne rozwiazania, bez wykorzystanie php, znalazło by się jeszcze wiecej.

Tam gdzie jest możliwość trzeba wykorzystywać mechanizmy baz danych a dopiero pozniej kombinowac z obliczeniami w kodzie.
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.