pawel06281990
29.01.2022, 22:11:09
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
Czy w dobrym kierunku idę
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.
pawel06281990
30.01.2022, 10:06:31
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
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?
pawel06281990
30.01.2022, 10:45:40
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
30.01.2022, 10:55:42
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
30.01.2022, 11:00:35
trueblue
30.01.2022, 11:07:26
viking,
Twoje rozwiązanie jest błędne - problemem jest przełom miesiąca.
viking
30.01.2022, 11:18:54
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
30.01.2022, 11:22:14
W bazie zapisuje date dnia zapisu i 5 dni ma odliczać od daty zapisania żądania o wysyłanie powiadomień
trueblue
30.01.2022, 11:24:57
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
30.01.2022, 11:36:49
załóżmy
}
Coś takiego musiałbym to przetestować jak to będzie wyglądać
trueblue
30.01.2022, 11:37:29
Różnica między datą zapisu, a datą aktualną.
Gdzie w Twoim kodzie jest data zapisu?
pawel06281990
30.01.2022, 11:42:58
Nie napisałem, bo to będzie wtedy wyglądać tak
if(date('Y-m-d',time()) - "2022.01.29"){
]
Bo zapis zrobiłem wczoraj
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ć.
pawel06281990
30.01.2022, 11:55:36
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
$dzien=gmmktime(13
,53
,11
,04
,24
,2002
); // 2002.04.24 - 13:53:11
// wyliczanie różnicy
$sekund = abs($teraz-$dzien); $minut = (int)($sekund/60);
$godzin = (int)($minut/60);
$dni = (int)($godzin/24);
$lat = (int)($dni/365);
// wyliczanie całego okresu
$sekund = (int)($sekund-$minut*60);
$minut = (int)($minut-$godzin*60);
$godzin = (int)($godzin-$dni*24);
$dni = (int)($dni-$lat*365);
echo "lat: $lat; dni: $dni; godzin: $godzin; minut: $minut; sekund: $sekund";
I na nim się będę wzorował
trueblue
30.01.2022, 11:59:20
miccom
31.01.2022, 09:15:15
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:
if( ostatnia_akcja_w_sekundach <= timestamp_teraz - pięc_dni_w_sekundach ) {
// wysyłam email i NADPISUJĘ w bazie danych nowy rekord ostatnia_akcja_w_sekundach = timestamp_teraz
}
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.