human_readable_duration

The timeline below displays how wordpress function human_readable_duration has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.3

/**
 * Converts 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 (str_starts_with($duration, '-')) {
        $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);
}

WordPress Version: 6.1

/**
 * Converts 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);
}

WordPress Version: 5.3

/**
 * 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);
}

WordPress Version: 5.1

/**
 * 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: 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: 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: Time duration in second or seconds. */
        $human_readable_duration[] = sprintf(_n('%s second', '%s seconds', $second), (int) $second);
    }
    return implode(', ', $human_readable_duration);
}