__prompt_time_dir=''
[ -d "$__prompt_time_dir" ] || __prompt_time_dir="${XDG_RUNTIME_DIR:-"/var/run/user/$(id -u)"}"
[ -d "$__prompt_time_dir" ] || __prompt_time_dir="${XDG_CACHE_HOME:-"$HOME/.cache"}"

__prompt_time_file="$__prompt_time_dir/prompt_time/$$"

mkdir -p "$(dirname "$__prompt_time_file")"

__prompt_time_start()
{
  date '+%s' >| "$__prompt_time_file"
}

__prompt_time_stop()
{
  [ -r "$__prompt_time_file" ] || return 0
  __prompt_time="$(("$(date '+%s')" - "$(cat "$__prompt_time_file")"))"
  rm "$__prompt_time_file"
  [ "$__prompt_time" -gt 0 ] || return 0
  __prompt_time_d="$((__prompt_time / (24*60*60)))"
  __prompt_time_h="$((__prompt_time % (24*60*60) / (60*60)))"
  __prompt_time_m="$((__prompt_time              % (60*60) / (60)))"
  __prompt_time_s="$((__prompt_time                        % (60)))"
  __prompt_time_d="$([ "$__prompt_time_d" -eq 0 ] || printf '%02dd' "$__prompt_time_d")"
  __prompt_time_h="$([ "$__prompt_time_h" -eq 0 ] || printf '%02dh' "$__prompt_time_h")"
  __prompt_time_m="$([ "$__prompt_time_m" -eq 0 ] || printf '%02dm' "$__prompt_time_m")"
  __prompt_time_s="$([ "$__prompt_time_s" -eq 0 ] || printf '%02ds' "$__prompt_time_s")"
  printf '%s' \
    "$__prompt_time_d" \
    "$__prompt_time_h" \
    "$__prompt_time_m" \
    "$__prompt_time_s"
}

__prompt_time()
{
  if [ "$2" ]
  then
    printf "$1" "$2"
  fi
}