code.fastix.org

Dateiansicht:

Datei:Projekte -> PHP:Zeitangaben normalisieren -> timeS2timeF.php
md5:95afa8f63e259d5f093f1f2d01cb5da6
sha1:f2376456a9cf38d04f16776e69cc3738a186a41d
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. }