siemka, jak mogę zrobić coś ala dzisiaj o 12:35 był online, wczoraj o 15:59 był online.
mógłby ktoś podrzucić przykład? bo zbytnio nie ogarniam.
w bazie przechowuje date jako datetime.
2020-01-01 17:16:26
Czy masz info o której user się wylogował gdzieś w bazie? Jeśli tak, to zadanie jest trywialne. Na potrzeby wyświetlania możesz użyć DateInterval, by porównać z dzisiejszą datą (new \DateTime('now')
). Wtedy masz różnicę dni jako d
i możesz sobie zrobić, że jak jest -1
(dziś - log) to dasz, że wczoraj
, dla -2
możesz wpisać dwa dni temu
etc.
Pipes napisał(a):
Czy masz info o której user się wylogował gdzieś w bazie? Jeśli tak, to zadanie jest trywialne. Na potrzeby wyświetlania możesz użyć DateInterval, by porównać z dzisiejszą datą (
new \DateTime('now')
). Wtedy masz różnicę dni jakod
i możesz sobie zrobić, że jak jest-1
(dziś - log) to dasz, żewczoraj
, dla-2
możesz wpisaćdwa dni temu
etc.
zrobiłem to tak:
$dt = new DateTime(getAccountLastActiveByID($_GET['id']));
$dt2 = new DateTime('now');
$dzisiaj = (int)$dt->format('d') - (int)$dt2->format('d');
if($dzisiaj == 0){
echo sprintf('<div class="ACCOUNT_STATUS offline" title="Dzisiaj o %s"></div>', $dt->format('H:i'));
}elseif($dzisiaj == -1){
echo sprintf('<div class="ACCOUNT_STATUS offline" title="Wczoraj o %s"></div>', $dt->format('H:i'));
}else{
echo sprintf('<div class="ACCOUNT_STATUS offline" title="%d dni temu"></div>', abs($dzisiaj));
}
i tutaj już problem sie zaczyna, bo jak miesiąc sie zmieni na np -1 to pokazuję online dzisiaj.....
Skorzystaj z DateTime::diff
, zamiast działać na własną rękę wyciągając z obiektów dni:
$dateDiff = $dt1 -> diff($dt2);
$diffByDays = intval($dateDiff -> format("%a"));
Dzięki temu nie musisz się martwić między innymi o przypadek różnicy w miesiącu.
Ferdynand Lipski napisał(a):
Skorzystaj z
DateTime::diff
, zamiast działać na własną rękę wyciągając z obiektów dni:$dateDiff = $dt1 -> diff($dt2); $diffByDays = intval($dateDiff -> format("%a"));
Dzięki temu nie musisz się martwić między innymi o przypadek różnicy w miesiącu.
jednak w tym kodzie tez jest problem.
bo powinien sprawdzać od 0:00 a nie równą dobę.
czyli przykładowo mam z wczoraj date o 19:09 a wyświetla dzisiaj o 19:09 zamiat wczoraj o 19:09
$dt = new DateTime(getAccountLastActiveByID($_GET['id']));
$dt2 = new DateTime('now');
$dzisiaj = (int)$dt->format('d') - (int)$dt2->format('d');
$dateDiff = $dt->diff($dt2);
$diffByDays = intval($dateDiff->format("%a"));
if($diffByDays == 0){
echo sprintf('<div class="ACCOUNT_STATUS offline" title="Dzisiaj o %s"></div>', $dt->format('H:i'));
}elseif($diffByDays == 1){
echo sprintf('<div class="ACCOUNT_STATUS offline" title="Wczoraj o %s"></div>', $dt->format('H:i'));
}else{
echo sprintf('<div class="ACCOUNT_STATUS offline" title="%d dni temu"></div>', $diffByDays);
}
Programistyczny napisał(a):
Ferdynand Lipski napisał(a):
Skorzystaj z
DateTime::diff
, zamiast działać na własną rękę wyciągając z obiektów dni:$dateDiff = $dt1 -> diff($dt2); $diffByDays = intval($dateDiff -> format("%a"));
Dzięki temu nie musisz się martwić między innymi o przypadek różnicy w miesiącu.
jednak w tym kodzie tez jest problem.
bo powinien sprawdzać od 0:00 a nie równą dobę.
czyli przykładowo mam z wczoraj date o 19:09 a wyświetla dzisiaj o 19:09 zamiat wczoraj o 19:09$dt = new DateTime(getAccountLastActiveByID($_GET['id'])); $dt2 = new DateTime('now'); $dzisiaj = (int)$dt->format('d') - (int)$dt2->format('d'); $dateDiff = $dt->diff($dt2); $diffByDays = intval($dateDiff->format("%a")); if($diffByDays == 0){ echo sprintf('<div class="ACCOUNT_STATUS offline" title="Dzisiaj o %s"></div>', $dt->format('H:i')); }elseif($diffByDays == 1){ echo sprintf('<div class="ACCOUNT_STATUS offline" title="Wczoraj o %s"></div>', $dt->format('H:i')); }else{ echo sprintf('<div class="ACCOUNT_STATUS offline" title="%d dni temu"></div>', $diffByDays); }
$dt = new DateTime(getAccountLastActiveByID($_GET['id']));
$dt_format = clone $dt;
$dt2 = new DateTime('now');
$dt_format->setTime(00, 00); // pokombinuj z ustawieniem odpowiedniej godziny
$dzisiaj = $dt_format->diff($dt2);
if ($dzisiaj->d == 0)
{
echo sprintf('<div class="ACCOUNT_STATUS offline" title="Dzisiaj o %s"></div>', $dt->format('H:i'));
}
elseif ($dzisiaj->d == 1)
{
echo sprintf('<div class="ACCOUNT_STATUS offline" title="Wczoraj o %s"></div>', $dt->format('H:i'));
}
else
{
echo sprintf('<div class="ACCOUNT_STATUS offline" title="%d dni temu"></div>', $dzisiaj->d);
}
$dt
zamiast$dt1
.