Skip to content

Seconds as a human duration

Turn a second count into days, hours, minutes, and seconds.

18th August 2026

from typing import List


def human_duration(secs: int) -> str:
    if secs < 0:
        return 'unknown'

    if secs == 0:
        return 'None'

    parts: List[str] = []

    days, secs = divmod(secs, 86400)
    if days:
        parts.append(f'{days} day{"s" if days != 1 else ""}')

    hours, secs = divmod(secs, 3600)
    if hours:
        parts.append(f'{hours} hour{"s" if hours != 1 else ""}')

    minutes, secs = divmod(secs, 60)
    if minutes:
        parts.append(f'{minutes} minute{"s" if minutes != 1 else ""}')

    if secs or not parts:
        parts.append(f'{secs} second{"s" if secs != 1 else ""}')

    if len(parts) > 1:
        return ', '.join(parts[:-1]) + ' & ' + parts[-1]
    return parts[0]