Dzisiaj,Wczoraj online

0

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 1726

2

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.

0
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 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.

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.....

1

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.

0
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);
		}
0
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);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1