Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Powiadomienia xx dni
Forum PHP.pl > Forum > Przedszkole
pawel06281990
Witam,

Mam pytanie jak zrobić, aby skrypt załóżmy co 5 dni wysyłał powiadomienia mam w bazie zapisane 5 dni wiem, że to się opiera na if ale nie wiem czy musze dać to w ten sposób

  1. if(5 < date("Y-m-d H:i:s", time()))


Czy w dobrym kierunku idęquestionmark.gif
trueblue
W złym. Sprawdzałeś co zwraca funkcja date?
Pomyśl wpierw co to znaczy "co 5 dni" - czy dziś powinno być wysłane powiadomienie, czy może jutro albo pojutrze.
pawel06281990
Cytat(trueblue @ 29.01.2022, 22:40:25 ) *
W złym. Sprawdzałeś co zwraca funkcja date?
Pomyśl wpierw co to znaczy "co 5 dni" - czy dziś powinno być wysłane powiadomienie, czy może jutro albo pojutrze.


To znaczy ze co 5 dni wysyłać ma powiadomienia na adres e-mail
trueblue
I według Ciebie jeśli dziś, za 5 dni, 10, 15, itd. oraz jutro, za 5 dni od jutra, itd., to będzie ok?
pawel06281990
Cytat(trueblue @ 30.01.2022, 10:14:16 ) *
I według Ciebie jeśli dziś, za 5 dni, 10, 15, itd. oraz jutro, za 5 dni od jutra, itd., to będzie ok?


Mi chodzi ze co 5 dni będzie wysyłane powiadomienie do momentu, kiedy użytkownik nie robi tej czynności o co jest proszony
trueblue
Jeszcze raz.
Jeśli wyślę dziś (30), 4.2.2022, 9.2.2022, 14.2.2022, itd., to będzie ok?
Czy może jeśli wyślę jutro (31), 5.2.2022, 10.2.2022, 15.2.2022?
viking
  1. echo (date('j') % 5) === 0;
trueblue
viking,
Twoje rozwiązanie jest błędne - problemem jest przełom miesiąca.
viking
Wiem, ale zależy jak dokładnie chce to zrobić. Ja bym i tak poszedł (jeśli to np mysql) w eventy na bazie (starts x, every 5 days). Chyba że też zapisuje w bazie ostatnią czynność i od niej ma być liczone 5 dni ale to już w ogóle nie problem.
pawel06281990
W bazie zapisuje date dnia zapisu i 5 dni ma odliczać od daty zapisania żądania o wysyłanie powiadomień
trueblue
No więc już wiesz, że musisz mieć jakiś punkt odniesienia, aby wysyłać co 5 dni.
Musisz obliczyć różnicę (w dniach) pomiędzy tym punktem odniesienia, a dniem aktualnym.
pawel06281990
załóżmy

  1. if(date('Y-m-d',time()) - 5){
  2.  
  3. }


Coś takiego musiałbym to przetestować jak to będzie wyglądać
trueblue
Różnica między datą zapisu, a datą aktualną.
Gdzie w Twoim kodzie jest data zapisu?
pawel06281990
Nie napisałem, bo to będzie wtedy wyglądać tak

  1. if(date('Y-m-d',time()) - "2022.01.29"){
  2.  
  3.  
  4. ]


Bo zapis zrobiłem wczoraj
trueblue
Jesteś bliżej.
Teraz należałoby poszukać w internecie jak się odejmuje daty, albo jak znaleźć różnicę, bo na pewno stringów nie można odejmować.
pawel06281990
Cytat(trueblue @ 30.01.2022, 11:45:14 ) *
Jesteś bliżej.
Teraz należałoby poszukać w internecie jak się odejmuje daty, albo jak znaleźć różnicę, bo na pewno stringów nie można odejmować.



Znalazłem taki przykład

  1. $teraz=gmmktime(); // aktualna data
  2. $dzien=gmmktime(13,53,11,04,24,2002); // 2002.04.24 - 13:53:11
  3.  
  4. // wyliczanie różnicy
  5. $sekund = abs($teraz-$dzien);
  6. $minut = (int)($sekund/60);
  7. $godzin = (int)($minut/60);
  8. $dni = (int)($godzin/24);
  9. $lat = (int)($dni/365);
  10.  
  11. // wyliczanie całego okresu
  12. $sekund = (int)($sekund-$minut*60);
  13. $minut = (int)($minut-$godzin*60);
  14. $godzin = (int)($godzin-$dni*24);
  15. $dni = (int)($dni-$lat*365);
  16.  
  17. echo "lat: $lat; dni: $dni; godzin: $godzin; minut: $minut; sekund: $sekund";


I na nim się będę wzorował
trueblue
Nie prościej?
https://itporady.pl/php-mysql/jak-obliczyc-...e-miedzy-datami
miccom
Super, nadal twierdzę aby zapisywać w bazie danych datę jako liczba ( timestamp ).

Można zapisać daty w bazie danych ale potem trzeba je konwertować.

Zamień datę now() na timestamp i zapisz jako zwykłą liczbę ( w bazie danych jako int ).

Potem przelicz, ile sekund mieści się w 5 dniach ( google 5 dni ile to sekund: 432000 sekund ) - i możesz do daty z bazy danych dodawać lub odejmować "5 dni w sekundach".

W twoim przypadku: data w bazie danych to czas ostatniej akcji, więc robisz warunek:

  1. if( ostatnia_akcja_w_sekundach <= timestamp_teraz - pięc_dni_w_sekundach ) {
  2. // wysyłam email i NADPISUJĘ w bazie danych nowy rekord ostatnia_akcja_w_sekundach = timestamp_teraz
  3. }
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.