code.fastix.org

Dateiansicht:

Datei:Projekte -> PHP:Zeitangaben normalisieren -> timeS2timeF.php
md5:34296695fe02905cc86b769abc58b9cc
sha1:a3d9f583eecc1fbd511cb7d7005d77082b427ae6
Download-Link:Download
  1. <?php
  2.  
  3. /** function timeS2timeF
  4. * returns a formatet time-string (like date)
  5. * Inputs:
  6. *       $t    :         the time
  7.                                 So you give '12.5h'   this mean 12h+30m.
  8.                                 So you give '12,5h'   this mean 12h+30m.
  9.                                 So you give '12.5m'   this mean 12m+30s.
  10.                                 So you give '12,5m'   this mean 12m+30s.
  11.                                 So you give '12:30'   this mean 12h+30m.
  12.                                 So you give '2:12:30' this mean 2h+12m+30s.
  13.                                 So you give  '12'         this mean 12h.
  14.                                 So you give '10m'         this mean mean 10m (600s).
  15.                                 So you give '10.5m'   this mean mean 10m+30se (630s).                          
  16.                                 So you give '10,5m'   this mean mean 10m+30se (630s).                          
  17.                                 So you give '600s'    this mean 10min (600s).
  18.                                 So you give '600.0s'  this mean 10min (600s).                                                          
  19.                                 So you give '600,0s'  this mean 10min (600s).                          
  20.  
  21.                                
  22. *   $format :   the output format (show http://php.net/manual/de/function.date.php)
  23.                                 default: 'H:i'
  24.                                 'U' give the seconds from 00:00:00
  25. *   $round  :   round to seconds ('seconds' and all unknown input)
  26.                    or to minutes ( 'm' ( maybe followed by chars ))
  27.                    or to houres  ( 'h' ( maybe followed by chars ))
  28. *   limit24   :  Begrenzen auf 24h? true, false
  29. *   $errType : E_USER_ERROR or E_USER_NOTICE ( throwed if time > 24h or not detectable )
  30. #**/
  31.  
  32.  
  33. function timeS2timeF ( $t, $format = '%H:%i', $round = false, $limit24=false, $errType= E_USER_NOTICE) {
  34.  
  35.     // Repair the Input
  36.    
  37.     $round = trim( $round );
  38.     $roundf = 1;
  39.     if ( $round ) {
  40.                 $round = strtolower( $round[0] );
  41.                 switch ( $round ) {
  42.                         case 'm':
  43.                                 $roundf = 60;
  44.                                 break;
  45.                         case 'h':
  46.                                 $roundf = 3600;
  47.                                 break;
  48.                 }
  49.     }
  50.    
  51.     // Repair the Input for time:
  52.        
  53.         if ( '' === $t ) {
  54.                 $t = 0;
  55.         }
  56.                
  57.         if                      ( is_float ( $t ) ) {
  58.                 // time ist given in houres (a float)
  59.                 $time = $t * 3600;
  60.                 $time = $roundf * round ( $time / $roundf );
  61.                 if ( ( ! $limit24 ) or $time < 86400 ) {
  62.                         return gmdate( $format, $time );
  63.                 } else {
  64.                         trigger_error( 'function timeS2timeF: input "' . $t . '" is greater then > 24h', $errType );
  65.                         return false;
  66.                 }
  67.         } else {
  68.             // time ist given in houres (a string)
  69.                 $time = strtolower( trim( str_replace( [',' ,' ', "\t"], ['.', '', '' ], $t ) ) );  
  70.                
  71.                 // string. examples: '12', '12.5', '12,5', '12h', '12.5h':
  72.                 if      ( 1 === preg_match( '/^[0-9]*\.{0,1}[0-9]{1,2}h{0,1}$/', $time ) ) {
  73.                         $time = floatval ( $time ) * 3600;
  74.                         $time = $roundf * round( $time / $roundf );
  75.                         if ( ( ! $limit24 ) or $time < 86400 ) {
  76.                                 return gmdate( $format, $time );
  77.                         } else {
  78.                                 trigger_error( 'function timeS2timeF: input "' . $t . '" is greater then > 24h', $errType );
  79.                                 return false;                          
  80.                         }
  81.                 }
  82.                
  83.                 // string. examples: '12m', '12.5m', '12,5m':
  84.                 elseif  ( 1 === preg_match( '/^[0-9]*\.{0,1}[0-9]{1,2}m$/', $time ) ) {
  85.                         $time = floatval ( $time ) * 60;
  86.                         $time = $roundf * round( $time / $roundf );
  87.                         if ( ( ! $limit24 ) or $time < 86400 ) {
  88.                                 return gmdate( $format, $time );
  89.                         } else {
  90.                                 trigger_error( 'function timeS2timeF: input "' . $t . '" is greater then > 24h', $errType );
  91.                                 return false;                                                          
  92.                         }
  93.                 }              
  94.  
  95.                 // string. examples: '12s', '12.5s', '12,5s':
  96.                 elseif  ( 1 === preg_match( '/^[0-9]*\.{0,1}[0-9]*s$/', $time ) ) {
  97.                         $time = floatval ( $time );
  98.                         $time = $roundf * round( $time / $roundf );
  99.                         if ( ( ! $limit24 ) or $time < 86400 ) {
  100.                                 return gmdate( $format, $time );
  101.                         } else {
  102.                                 trigger_error( 'function timeS2timeF: input "' . $t . '" is greater then > 24h', $errType );
  103.                                 return false;                                                          
  104.                         }
  105.                 }              
  106.  
  107.                 // string. examples: '2:12:30':
  108.                 elseif  ( 1 === preg_match ( '/^[0-9]+:[0-9]{1,2}:[0-9]{1,2}$/', $time ) ) {
  109.                         list ($h, $m, $s ) = explode( ':', $time );
  110.                         $time =  $h * 3600 + $m * 60 + $s;
  111.                         $time = $roundf * round( $time / $roundf );
  112.                         if ( ( ! $limit24 ) or $time < 86400 ) {
  113.                                 return gmdate( $format, $time );
  114.                         } else {
  115.                                 trigger_error( 'function timeS2timeF: input "' . $t . '" is greater then > 24h', $errType );
  116.                                 return false;                                                          
  117.                         }
  118.                 }
  119.                                
  120.                 // string. examples: '12:30':
  121.                 elseif  ( 1 === preg_match ( '/^[0-9]+:[0-9]{1,2}$/', $time ) ) {
  122.                         list ($h, $m ) = explode( ':', $time );
  123.                         $time =  $h * 3600 + $m * 60;
  124.                         $time = $roundf * round( $time / $roundf );
  125.                         if ( ( ! $limit24 ) or $time < 86400 ) {
  126.                                 return gmdate( $format, $time );
  127.                         } else {
  128.                                 trigger_error( 'function timeS2timeF: input "' . $t . '" is greater then > 24h', $errType );
  129.                                 return false;                                                          
  130.                         }
  131.                 }
  132.                 else {
  133.                         rigger_error( 'function timeS2timeF: input "' . $t . '" is not detectable', $errType );
  134.                         return false;
  135.                 }
  136.         }
  137. }