Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Sprawdzanie czy data mineła
Forum PHP.pl > Forum > Przedszkole
krzychu0808
Witam... napisałem skrypt który sprawdza czy podana data minęła bo przymierzam się do pisania gry i będą robione upgrade i podaje do bazy data i czas kiedy się kończy dany upgrade. Co 3 minuty będzie się wykonywał się skrypt który będzie sprawdzał wszystkie upgrade robione przez użytkowników i te których czas już miną to będą odpowiednie wpisy do bazy i napisałem sobie sprawdzanie czy czas miną ale nie wiem czy to nie będzie zamulać serwera jak będzie większa ilość operacji. jestem początkujący proszę o wyrozumiałość

  1. <?
  2.    $data = "2009-07-10";
  3.    $obecna_data = date("Y-m-d");
  4.    $dni = (strtotime($data) - strtotime($obecna_data)) / (60*60*24);
  5.  
  6.    $czas = "23:02:13";
  7.    $obecny_czas = date("H:i:s");
  8.    $czasu = (strtotime($czas) - strtotime($obecny_czas));
  9.    
  10.    if($dni<=0 and $czasu<=0) {
  11.        echo "Podana data mineła";
  12.    }
  13.    else {
  14.        echo "Podana data nie mineła";
  15.    }
  16. ?>
Ellington
Skorzystaj z funkcji mktime.
Kildyt
Na pewno można ten kod skrócić. Ja generalnie takie czasu zapisuję jako wynik funkcji time(). Nie tracisz wtedy czasu na przeliczanie tylko od razu sprawdzasz.

Jeszcze pytanie: w jaki sposób odpalasz skrypt sprawdzający czy czas minął i wykonujący określone działania?
Fifi209
Cytat(Kildyt @ 10.07.2009, 22:23:09 ) *
Na pewno można ten kod skrócić. Ja generalnie takie czasu zapisuję jako wynik funkcji time(). Nie tracisz wtedy czasu na przeliczanie tylko od razu sprawdzasz.

Jeszcze pytanie: w jaki sposób odpalasz skrypt sprawdzający czy czas minął i wykonujący określone działania?


Skoro będzie się wykonywał to zapewne z cron'a.
Kildyt
Cytat(fifi209 @ 10.07.2009, 23:24:57 ) *
Skoro będzie się wykonywał to zapewne z cron'a.

Nie byłbym tego pewien. Jeżeli dane są potrzebne tylko jednemu graczowi to IMHO lepiej sprawdzać datę przy odświeżeniu strony przez użytkownika. Nie traci się wtedy czasu podczas gdy gracz nie jest aktywny.
Fifi209
Cytat(Kildyt @ 10.07.2009, 22:28:44 ) *
Nie byłbym tego pewien. Jeżeli dane są potrzebne tylko jednemu graczowi to IMHO lepiej sprawdzać datę przy odświeżeniu strony przez użytkownika. Nie traci się wtedy czasu podczas gdy gracz nie jest aktywny.


Napisał, że co 3 minuty dla wszystkich użytkowników.

Czytaj uważniej.
krzychu0808
tak cronjob
a co do tego mktime to ja muszę chyba podstawić do niego aktualny czas i datę , później postawić do niego jaką chce datę i odjąć... chyba że źle chce stosować mktime
mktime ( int godzina, int minuta, int sekunda, int miesiąc, int dzień, int rok [, int letni/zimowy] )

coś takiego questionmark.gifquestionmark.gif
  1. <?php
  2. $a = mktime (23,29,0,07,10,2009);
  3. $b = mktime (23,28,0,07,10,2009);
  4. $c = $a - $b;
  5. ?>
Kildyt
Cytat(krzychu0808 @ 10.07.2009, 23:34:43 ) *
tak cronjob
a co do tego mktime to ja muszę chyba podstawić do niego aktualny czas i datę , później postawić do niego jaką chce datę i odjąć... chyba że źle chce stosować mktime
mktime ( int godzina, int minuta, int sekunda, int miesiąc, int dzień, int rok [, int letni/zimowy] )

Dalej będę stał przy swoim. Nie lepiej zapisać time() do bazy i na nim operować? Przy większej ilości użytkowników te ułamki sekund mogą zaważyć na całości - zgodnie z "grosz do grosza, a będzie kokosza".

Cytat(fifi209 @ 10.07.2009, 23:30:19 ) *
Napisał, że co 3 minuty dla wszystkich użytkowników.

Czytaj uważniej.
Masz rację, zwracam honory. Nie denerwuj się tak. winksmiley.jpg
krzychu0808
Jestem początkujący nie rozumiem o co ci chodzi z tym time() do bazy

Sorki manula nie boli tongue.gif już wiem smile.gif
Fifi209
Cytat(Kildyt @ 10.07.2009, 22:43:06 ) *
Dalej będę stał przy swoim. Nie lepiej zapisać time() do bazy i na nim operować?

Co łatwości operowania, faktycznie time() będzie dobrym pomysłem.

Cytat(Kildyt @ 10.07.2009, 22:43:06 ) *
Przy większej ilości użytkowników te ułamki sekund mogą zaważyć na całości - zgodnie z "grosz do grosza, a będzie kokosza".

Jeżeli będzie mu do czegoś innego potrzebny ten czas np. będzie go gdzieś wyświetlał to na jedno wyjdzie.

Cytat(Kildyt @ 10.07.2009, 22:43:06 ) *
Masz rację, zwracam honory. Nie denerwuj się tak. winksmiley.jpg


Nie denerwuje się.
krzychu0808
W sumie z tej samej tabeli będą odczytywane te jego upgrade ile pozostało dni,minut,sekund do końca... robie do tego osobną tabele bo będzie kolejkowanie
Kildyt
Cytat(krzychu0808 @ 10.07.2009, 23:46:41 ) *
Jestem początkujący nie rozumiem o co ci chodzi z tym time() do bazy
Ja też jestem początkującym, ale się tym nie chwalę. tongue.gif

Zamiast:
  1. <?
  2.   $data = "2009-07-10";
  3.   $obecna_data = date("Y-m-d");
  4.   $dni = (strtotime($data) - strtotime($obecna_data)) / (60*60*24);
  5.  
  6.   $czas = "23:02:13";
  7.   $obecny_czas = date("H:i:s");
  8.   $czasu = (strtotime($czas) - strtotime($obecny_czas));
  9.  
  10.   if($dni<=0 and $czasu<=0) {
  11.       echo "Podana data mineła";
  12.   }
  13.   else {
  14.       echo "Podana data nie mineła";
  15.   }
  16. ?>

Zrobiłbym:
  1. <?php
  2. $data = '242342134234'; //zapisany time() podczas akcji i ew. dodanie do niego potrzebnych sekund
  3.  
  4. if (time() > $data)
  5.   echo 'Podana data minęła';
  6. else
  7.   echo 'Jeszcze nie';
  8. ?>
Fifi209
Cytat(Kildyt @ 10.07.2009, 22:51:22 ) *
Zrobiłbym:
  1. <?php
  2. $data = '242342134234'; //zapisany time() podczas akcji i ew. dodanie do niego potrzebnych sekund
  3.  
  4. if (time() > $data)
  5.   echo 'Podana data minęła';
  6. else
  7.   echo 'Jeszcze nie';
  8. ?>


Właśnie o to chodzi, tylko że $data w tym przypadku byłaby wyciągana z bazy.
krzychu0808
Właśnie już to pisałem czy o to wam chodzi.. Dzięki za info
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.