$records) { $totalActive = 0; $totalAfk = 0; $totalYemek = 0; $totalWc = 0; $loginMinutes = []; $count = count($records); foreach ($records as $r) { $totalActive += ($r['active_duration'] ?? 0); $totalAfk += ($r['afk_duration'] ?? 0); $totalYemek += ($r['yemek_duration'] ?? 0); $totalWc += ($r['wc_duration'] ?? 0); if ($r['first_login']) { $t = strtotime($r['first_login']); $loginMinutes[] = (int)date('H', $t) * 60 + (int)date('i', $t); } } $avgLoginMin = count($loginMinutes) > 0 ? array_sum($loginMinutes) / count($loginMinutes) : 0; $userAverages[$name] = [ 'avg_active' => $count > 0 ? round($totalActive / $count / 3600, 2) : 0, 'avg_afk' => $count > 0 ? round($totalAfk / $count / 3600, 2) : 0, 'avg_yemek' => $count > 0 ? round($totalYemek / $count / 3600, 2) : 0, 'avg_wc' => $count > 0 ? round($totalWc / $count / 3600, 2) : 0, 'avg_login' => sprintf('%02d:%02d', floor($avgLoginMin / 60), $avgLoginMin % 60), 'days_count' => $count, ]; } function formatDuration($seconds) { if (!$seconds) return '-'; $h = floor($seconds / 3600); $m = floor(($seconds % 3600) / 60); if ($h > 0) return $h . 's ' . $m . 'dk'; return $m . 'dk'; } function formatTime($datetime) { if (!$datetime) return '-'; return date('H:i', strtotime($datetime)); } ?> Odyssey Takip Paneli

Odyssey Takip Paneli

Ekip aktivite ve mesai takibi

Toplam Kullanıcı
Şu An Çevrimiçi
0 ? round($totalActiveAll / $totalUsers / 3600, 1) : 0; ?>s
Ort. Aktif Süre
İlk Giriş

— Günlük Detay

Kullanıcı Durum İlk Giriş Son Görülme Aktif Süre AFK Yemek WC Dağılım
ort. giriş:
Çevrimiçi Çevrimdışı ort: s
Aktif AFK Yemek WC

Bu tarih için veri bulunamadı.

Son 14 Gün Ortalamaları
$avg): ?>
Ort. Giriş
Ort. Aktifs
Ort. AFKs
Ort. Yemeks
Ort. WCs
Gün Sayısı
Son 14 Gün Grafikleri

Günlük Aktif Süre (saat)

İlk Giriş Saati

Yemek Süresi (dk)

WC Süresi (dk)