Php function to convert a duration to human readable format.

Convert a duration to human readable format.

$duration Duration will be in string format (HH:ii:ss) OR (ii:ss),with a possible prepended negative sign (-).

This return a human readable duration string, false on failure.

/**
 Convert a duration to human readable format.
 *
 @since 5.1.0
 *
 @param string $duration Duration will be in string format (HH:ii:ss) OR (ii:ss),
 with a possible prepended negative sign (-).
 @return string|false A human readable duration string, false on failure.
 */
 function human_readable_duration( $duration = '' ) {
     if ( ( empty( $duration ) || ! is_string( $duration ) ) ) {
         return false;
     }
 $duration = trim( $duration ); // Remove prepended negative sign. if ( '-' === substr( $duration, 0, 1 ) ) {     $duration = substr( $duration, 1 ); } // Extract duration parts. $duration_parts = array_reverse( explode( ':', $duration ) ); $duration_count = count( $duration_parts ); $hour   = null; $minute = null; $second = null; if ( 3 === $duration_count ) {     // Validate HH:ii:ss duration format.     if ( ! ( (bool) preg_match( '/^([0-9]+):([0-5]?[0-9]):([0-5]?[0-9])$/', $duration ) ) ) {         return false;     }     // Three parts: hours, minutes & seconds.     list( $second, $minute, $hour ) = $duration_parts; } elseif ( 2 === $duration_count ) {     // Validate ii:ss duration format.     if ( ! ( (bool) preg_match( '/^([0-5]?[0-9]):([0-5]?[0-9])$/', $duration ) ) ) {         return false;     }     // Two parts: minutes & seconds.     list( $second, $minute ) = $duration_parts; } else {     return false; } $human_readable_duration = array(); // Add the hour part to the string. if ( is_numeric( $hour ) ) {     /* translators: %s: Time duration in hour or hours. */     $human_readable_duration[] = sprintf( _n( '%s hour', '%s hours', $hour ), (int) $hour ); } // Add the minute part to the string. if ( is_numeric( $minute ) ) {     /* translators: %s: Time duration in minute or minutes. */     $human_readable_duration[] = sprintf( _n( '%s minute', '%s minutes', $minute ), (int) $minute ); } // Add the second part to the string. if ( is_numeric( $second ) ) {     /* translators: %s: Time duration in second or seconds. */     $human_readable_duration[] = sprintf( _n( '%s second', '%s seconds', $second ), (int) $second ); } return implode( ', ', $human_readable_duration );
 } 

Leave a Comment

Your email address will not be published. Required fields are marked *