User Tools

Site Tools


decoding_dates_and_times

Converting Decimal Hours Into an (hh, mm, ss) Time String.

Sometimes we have to convert a decimal fraction of a day or hours given as a decimal fraction into the corresponding days, hours, minutes and seconds values or vice versa. In PHP, this is very easy. Below are two random example programs the with related source code to demonstrate the process of converting decimal hours into (hh,mm,ss) and decimal days into (dd, hh,mm,ss).


Here is an example program showing how to convert a random decimal hours value into an (hh, mm, ss.sss) string

<?php

// Convert decimal hours to (hh, mm, ss.sss) using standard-precision
// arithmetic.  The seconds are rounded to from 0 to 3 decimals.

// Generate random values for example or substitute any desired custom values.
   $hours = ((mt_rand() % 2 == 0)? "":"-") . mt_rand(0, 23) . "." . mt_rand(0, 9) . mt_rand();

// Set random number of decimals in seconds part of output
// and construct output format control string.
   $D = mt_rand(0, 3); // Range 0 to 3

// -----------------------------------------------------
// Remember numerical sign and work with absolute value.
// The sign will be reattached to the final result.
   $sign = ($hours < 0)? "-" : "";  

// Derive hours value.
   $hh = floor(abs($hours));

// Derive minutes value.   
   $minutes = 60*(abs($hours) - $hh);
   $mm = floor($minutes);

// Derive seconds value.   
   $seconds = 60*($minutes - $mm);

// Format (hh, mm, ss) values for output.
   $hh  = sprintf("%02d",  $hh);
   $mm  = sprintf("%02d",  $mm);
   $ss  = sprintf("%1.$D" . "f", $seconds);  if($ss < 10) {$ss = "0$ss";}
   $hhh = $hh . "h";
   $mmm = $mm . "m";
   $sss = $ss . "s";

// Construct signed (±hh, mm, ss) time output strings.
   $hhmmss = "$sign$hh:$mm:$ss";
   $hhhmmmsss = "$sign$hhh $mmm $sss";
   
// Display the final (hh, mm, ss) result.
   print "<pre>Random Example:\n$hours hours\nDecimals = $D\n\nSo, we have:\n$hours hours = $hhhmmmsss  or  $hhmmss</pre>";

?>

Below is the output of the above (hours) to (hh, mm, ss) conversion example.

Random Example:
-15.41009838336 hours
ssDecimals = 2

So, we have:
-15.41009838336 hours = -15h 24m 36.35s  or  -15:24:36.35





Converting decimal (days) into a (dd, hh, mm, ss.sss) string

<?php

// Convert decimal days to (dd, hh, mm, ss.sss) using standard-precision
// arithmetic.  The seconds are rounded to from 0 to 3 decimals.

// Generate random days value for example or substitute any other custom value.
   $days = mt_rand(0, 365) . "." . mt_rand(0, 9) . mt_rand();

// Set number of decimals in seconds part of output
// and construct output format control string.
   $D=3; // Range 0 to 3

// Derive days (dd) value.
   $dd = floor($days);
   
// Derive hours value.    
   $hours = 24*($days - $dd);
   $hh = floor($hours);
   
// Derive minutes value.   
   $minutes = 60*($hours - $hh);
   $mm = floor($minutes);

// Derive seconds value
   $seconds = 60*($minutes - $mm);

// Format (dd, hh, mm, ss) values for output.
   $dd .= "d";
   $hh  = sprintf("%02d",  $hh) . "h";
   $mm  = sprintf("%02d",  $mm) . "m";
   $ss  = sprintf("%1.$D" . "f", $seconds);  if($ss < 10) {$ss = "0$ss";}
   $ss .= "s";

// Display the (dd,hh,mm,ss) result.
   print "<pre>$days days = $dd $hh $mm $ss</pre>";

?>

Below is the output of the above (days) to (dd, hh, mm, ss) conversion example.

358.01373647156 days = 358d 00h 19m 46.831s

decoding_dates_and_times.txt · Last modified: 2014/04/22 08:54 by Jay.Tanner.x@PHPScienceLabs.us