X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=format.php;h=f90fc1f15c4ba9f876dc851e32e56206d9705a4c;hb=7596b1ca035ff09e584e915a6e5572ffb46d7625;hp=a4810110cece0762a0dc003b28b4fd251d984223;hpb=661a0849c8460c27b4081a5d3d65441a264b07ab;p=wfpl.git diff --git a/format.php b/format.php index a481011..f90fc1f 100644 --- a/format.php +++ b/format.php @@ -45,22 +45,48 @@ function format_int($str) { return ereg_replace('^0*([0-9])', '\1', $str); } -function format_decimal($str) { +function format_decimals($str) { + $str = ereg_replace('[^0-9]', '', $str); + return ereg_replace('^([0-9])0*', '\1', $str); +} + +function _format_positive_decimal($str) { $str = ereg_replace('[^0-9.]', '', $str); $pos = strpos($str, '.'); if($pos !== false) { $str = str_replace('.', '', $str); if($pos == 0) { - return '0.' . $str; + return '0.' . format_decimals($str); } elseif($pos == strlen($str)) { - return $str; + return format_int($str); } else { - return substr($str, 0, $pos) . '.' . substr($str, $pos); + return format_int(substr($str, 0, $pos)) . '.' . format_decimals(substr($str, $pos)); } } + return format_int($str); +} + +function format_positive_decimal($str) { + $str = _format_positive_decimal($str); + if($str === '0.0') { + $str = '0'; + } return $str; } +function format_decimal($str) { + $str = ereg_replace('[^0-9.-]', '', $str); + if(substr($str, 0, 1) == '-') { + $str = format_positive_decimal(substr($str, 1)); + if($str !== '' && $str !== '0') { + $str = '-' . $str; + } + return $str; + } else { + return format_positive_decimal($str); + } +} + # return 0 of there's no digits function format_int_0($str) { $str = format_int($str); @@ -192,6 +218,62 @@ function format_mdy_to_ymd($str) { return mdy_to_ymd(format_oneline($str)); } +# date is yyyy-mm-dd +function format_ymd($str) { + require_once('code/wfpl/time.php'); + list($year, $month, $day) = ymd_clean($str); + return sprintf('%04u-%02u-%02u', $year, $month, $day); +} + +# takes any of: HH :MM HH:MM +# returns decimal number of hours +# +# You probably want to use format_hours() instead because it handles hours with a decimal point. +function format_hours_minutes($str) { + if(strlen($str) == 0) { + return $str; + } + $pos = strpos($str, ':'); + if($pos === false) { + $hours = format_int_0($str); + $minutes = 0; + } elseif($pos == 0) { + $hours = 0; + $minutes = format_int_0($str); + } else { + $hours = format_int_0(substr($str, 0, $pos)); + $minutes = format_int_0(substr($str, $pos + 1)); + } + return $hours + ($minutes / 60.0); +} + +# takes any of: HH :MM HH:MM HH.hh(decimal hours) +# returns decimal number of hours +function format_hours($str) { + if(strlen($str) == 0) { + return $str; + } + if(strpos($str, ':') !== false) { + return format_hours_minutes($str); + } else { + return format_decimal($str); + } +} + +# takes eg 12:23am +# returns decimal number of hours since midnight +function format_12hr_to_hours($str) { + if(eregi('noon', $str)) { + return 12; + } + $hours = format_hours($str); + if($hours < 12 && eregi('p', $str)) { + $hours += 12; + } + return $hours; +} + + function format_phone($str) { $str = ereg_replace('[^0-9]', '', $str); $str = ereg_replace('^1*', '', $str);