Re: datediff not accurate.
Posted: 21 Mar 2011 02:12
Can you please use code tags for your code? Thank you 
Forum for XYplorer Users and Developers
https://www.xyplorer.com/xyfc/
Try this for starters (not throroughly tested). Indeed integer division and modulo are applied:tiago wrote:Despite admin's helpful additions to math, I am still looking after a reliable method to convert seconds in hours and minutes. Took 4 different approaches and still stuck on this. Any help...?
14398 secs = 3h 59min 58sec
Code: Select all
// format duration given in seconds
$DAYS_PER_YEAR = 365.25;
$HOURS_PER_DAY = 24;
$MINS_PER_HOUR = 60;
$SECS_PER_MIN = 60;
$duration = "";
$Secs = 14398;
$Mins = $Secs \ $SECS_PER_MIN;
$Hours = $Mins \ $MINS_PER_HOUR;
$Days = $Hours \ $HOURS_PER_DAY;
$Years = $Days \ $DAYS_PER_YEAR;
If ($Years > 0) {
$duration = $Years . "y";
}
$Days = $Days % $DAYS_PER_YEAR;
If ($Days > 0) {
$duration = $duration . " " . $Days . "d";
}
$Hours = $Hours % $HOURS_PER_DAY;
If ($Hours > 0) {
$duration = $duration . " " . $Hours . "h";
}
$Mins = $Mins % $MINS_PER_HOUR;
If ($Mins > 0) {
$duration = $duration . " " . $Mins . "min";
}
$Secs = $Secs % $SECS_PER_MIN;
If ($Secs > 0) {
$duration = $duration . " " . $Secs . "sec";
}
echo $duration;Yes, we know that one must check at least daily for newest vers here!tiago wrote:It worked after a little upgrade, have to learn to keep an eye on your beta releases. Works like a charm, admin!
Code: Select all
// format duration given in seconds
$DAYS_PER_YEAR = 365.25;
$HOURS_PER_DAY = 24;
$MINS_PER_HOUR = 60;
$SECS_PER_MIN = 60;
$sep = " ";
$duration = "";
$Secs = 14398;
$Mins = $Secs \ $SECS_PER_MIN;
$Hours = $Mins \ $MINS_PER_HOUR;
$Days = $Hours \ $HOURS_PER_DAY;
$Years = $Days \ $DAYS_PER_YEAR;
If ($Years > 0) {
$duration = $duration . $sep . $Years . "y";
}
$Days = $Days % $DAYS_PER_YEAR;
If ($Days > 0) {
$duration = $duration . $sep . $Days . "d";
}
$Hours = $Hours % $HOURS_PER_DAY;
If ($Hours > 0) {
$duration = $duration . $sep . $Hours . "h";
}
$Mins = $Mins % $MINS_PER_HOUR;
If ($Mins > 0) {
$duration = $duration . $sep . $Mins . "min";
}
$Secs = $Secs % $SECS_PER_MIN;
If ($Secs > 0) {
$duration = $duration . $sep . $Secs . "sec";
}
// cut initial sep
$duration = substr($duration, strlen($sep));
echo $duration;