48 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env cached-nix-shell
 | 
						|
#! nix-shell -i bash -p bc
 | 
						|
set -e
 | 
						|
(( $# > 0 )) || exit
 | 
						|
 | 
						|
# Displays the time since $1 in a human readable format (e.g. 4h 25m 55s). If
 | 
						|
# given a file, the modified time is used. If $1 == "--", then this script acts
 | 
						|
# as a converter, converting $2 into human a readable format, e.g. since -- 72
 | 
						|
# #=> 1m 12s
 | 
						|
 | 
						|
# TODO: A help fallback
 | 
						|
# TODO: Options parsing?
 | 
						|
 | 
						|
# If given a file, give time since last modification
 | 
						|
(( $# == 1 )) && [[ -f $1 ]] && arg=reference || arg=date
 | 
						|
 | 
						|
if [[ $1 == -- ]]; then
 | 
						|
  t="$2"
 | 
						|
else
 | 
						|
  now=$(date +%s)
 | 
						|
  then=$(date --$arg="$*" +%s)
 | 
						|
 | 
						|
  t=$(( now - then ))
 | 
						|
fi
 | 
						|
 | 
						|
# Bash doesn't support floating point arithmetic like zsh does, so use bc to do
 | 
						|
# our arithmetic.
 | 
						|
bc <<EOF
 | 
						|
  define abs(i) {
 | 
						|
    if (i < 0) return (-i)
 | 
						|
    return (i)
 | 
						|
  }
 | 
						|
 | 
						|
  t = abs($t)
 | 
						|
 | 
						|
  weeks = t / 60 / 60 / 24 / 7
 | 
						|
  days = t / 60 / 60 / 24 % 7
 | 
						|
  hours = t / 60 / 60 % 24
 | 
						|
  minutes = t / 60 % 60
 | 
						|
  seconds = t % 60
 | 
						|
 | 
						|
  if (weeks > 0) print weeks, "w "
 | 
						|
  if (days > 0) print days, "d "
 | 
						|
  if (hours > 0) print hours, "h "
 | 
						|
  if (minutes > 0) print minutes, "m "
 | 
						|
  print seconds, "s"
 | 
						|
EOF
 |