karimali831 Posted August 28, 2010 Share Posted August 28, 2010 Hello! Does anyone know an effective way to track inactive idlers in daily basis? So that it will count the amount of days no data has been posted to the table. E.g. User posts latest data and inserts timestamp 1282228120 which reads Thursday, August 19th 2010, 14:28:40 (GMT) The days for inactivity should output as 8 days because no data has been posted from 20th August to today - 28th August. Anyway I can achieve this? Any information is appreciated, thanks. Quote Link to comment Share on other sites More sharing options...
PaulRyan Posted August 28, 2010 Share Posted August 28, 2010 Hello karimali831, I used to have the same problem a while ago, so I decided to create a function to fix the problem. function returnTime($value) { $timeDiff = time()-$value; // Get the difference in time $fullYears = floor($timeDiff/365.2422/24/60/60); // Set the amount of years since $value $fullDays = floor($timeDiff/24/60/60)-($fullYears*365); // Set the amount of dayss since $value $fullHours = floor($timeDiff/60/60)-($fullDays*24)-($fullYears*365*24); // Set the amount of hours since $value $fullMinutes = floor($timeDiff/60)-($fullHours*60)-($fullDays*24*60)-($fullYears*365*24*60); // Set the amount of minutes since $value $fullSeconds = floor($timeDiff)-($fullMinutes*60)-($fullHours*60*60)-($fullDays*24*60*60)-($fullYears*365*24*60*60); // Set the seconds of years since $value // Now we check the difference and output correct timescale if($timeDiff >= '31536000') { return ''.$fullYears.' year(s)'; } else if($timeDiff >= '86400' && $timeDiff < '31536000') { return ''.$fullDays.' day(s)'; } else if ($timeDiff >= '3600' && $timeDiff < '86400') { return ''.$fullHours.' hour(s)'; } else if ($timeDiff >= '60' && $timeDiff < '3600') { return ''.$fullMinutes.' minute(s)'; } else if ($timeDiff < '60') { return ''.$fullSeconds.' second(s)'; } } Simple call returnTime('Your Timestamp') wherever you want and it will show time since date in the correct format. Hopefully this can help, if not let em know. Thanks, Paul. Quote Link to comment Share on other sites More sharing options...
karimali831 Posted August 28, 2010 Author Share Posted August 28, 2010 Thanks! works fine with php max $last_played = max($gc['new_date'],$gc['reply_date'],$gc['finalized_date']); I also want to use it for php min excluding 0 values to find the longest idler: $getchallenges = safe_query("SELECT * FROM ".PREFIX."cup_challenges WHERE ladID='$ladID'"); while($ds=mysql_fetch_array($getchallenges)) { if($ds['new_date']) $new_date = $ds['new_date']; if($ds['reply_date']) $reply_date = $ds['reply_date']; if($ds['finalized_date']) $finalized_date = $ds['finalized_date']; $getmin = min($new_date,$reply_date,$finalized_date); } return returnTime($getmin); min() is not retrieving the values correctly. I want to retrieve lowest value from columns new_date, reply_date and finalized_date excluding 0. must I use array? Quote Link to comment Share on other sites More sharing options...
PaulRyan Posted August 28, 2010 Share Posted August 28, 2010 Ohh right I see, could you give me some example data that will be passed from the folling fields from your database: $ds['new_date'] $ds['reply_date'] $ds['finalized_date'] This may help me in understanding your situation a little more. Thanks, Paul. Quote Link to comment Share on other sites More sharing options...
karimali831 Posted August 28, 2010 Author Share Posted August 28, 2010 Sure! echo: echo '<br>newdate = '.$ds['new_date'].''; echo '<br>replydate = '.$ds['reply_date'].''; echo '<br>finalized date = '.$ds['finalized_date'].''; Output: newdate = 1282948140 replydate = 0 finalized date = 0 newdate = 1282955160 replydate = 0 finalized date = 0 newdate = 1282959480 replydate = 0 finalized date = 0 newdate = 1282960620 replydate = 0 finalized date = 0 newdate = 1282971660 replydate = 1282971720 finalized date = 01282971720 According to the output, I want it to return returnTime('1282948140'); (lowest timestamp except 0) Thanks again Quote Link to comment Share on other sites More sharing options...
PaulRyan Posted August 28, 2010 Share Posted August 28, 2010 I think I have found a solution... Replace the following $getmin = min($new_date,$reply_date,$finalized_date); With this // Put value into an array $getMin = array($new_date,$reply_date,$finalized_date); //Filter out any NULL or FALSE values including '0' //Then return the lowest value $getMin = min(array_filter($getMin)); Hopefully this will help you karimali831. Thanks, Paul. Quote Link to comment Share on other sites More sharing options...
karimali831 Posted August 28, 2010 Author Share Posted August 28, 2010 Thanks for your reply. Now I get something, but I believe it picked out the incorrect value. I echo $getMin but it gets: 1282971660 (highest in new_date column) max is: 1282971720 $getMin needs to have min: 1282948140 $getchallenges = safe_query("SELECT * FROM ".PREFIX."cup_challenges WHERE ladID='$ladID'"); while($ds=mysql_fetch_array($getchallenges)) { if($ds['new_date']) $new_date = $ds['new_date']; if($ds['reply_date']) $reply_date = $ds['reply_date']; if($ds['finalized_date']) $finalized_date = $ds['finalized_date']; $getMin = array($new_date,$reply_date,$finalized_date); $getMin = min(array_filter($getMin)); }echo 'getmin = '.$getMin.''; return returnTime($getMin); Quote Link to comment Share on other sites More sharing options...
karimali831 Posted August 28, 2010 Author Share Posted August 28, 2010 My thought, I had to use your function inside the loop: $getchallenges = safe_query("SELECT * FROM ".PREFIX."cup_challenges WHERE ladID='$ladID'"); while($ds=mysql_fetch_array($getchallenges)) { if($ds['new_date']) $new_date = $ds['new_date']; if($ds['reply_date']) $reply_date = $ds['reply_date']; if($ds['finalized_date']) $finalized_date = $ds['finalized_date']; $getMin = array($new_date,$reply_date,$finalized_date); $getMin = min(array_filter($getMin)); return returnTime($getMin); } Thanks again very much for your help! Quote Link to comment Share on other sites More sharing options...
PaulRyan Posted August 28, 2010 Share Posted August 28, 2010 Ohh yeah I forgot to mention that actually, good ot see you figured it out. Glad to be of assistance, if you need help in future you can PM me or contact me via e-mail: paul_mc_2k6@hotmail.co.uk Thanks, Paul. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.