1

This question already has an answer here:

How can I subtract two dates in epoch format using Shell Scripting. I want the output in Months, Days, Hours format. Also It should work even for more than 12 months ( as I came across few which were resetting to 0 months if more than 12)

marked as duplicate by Ulrich Schwarz, Archemar, garethTheRed, taliezin, don_crissti Oct 12 '15 at 16:09

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • Epoch format ? number of second since 1/1/1970 ? – Archemar Oct 12 '15 at 14:12
  • Yes Archemar... no. of seconds since 1/1/1970. – ajain Oct 12 '15 at 14:16
  • 7
    Possible duplicate: Tool in UNIX to subtract dates – Marco Oct 12 '15 at 14:23
  • didn't it depends on starting date ? 29 days from Jan,31 to Mar,1st (and one month), 29 days from July,1 to July,30 and zero month. – Archemar Oct 12 '15 at 14:24
  • github.com/hroptatyr/dateutils is the best bet so far. – Deer Hunter Oct 12 '15 at 14:42
5

Try something like this:

#!/bin/bash

d1=`date -d 20140929 +%s`
d2=`date -d 20001115 +%s`

date --date=@$(($d1 - $d2)) +'%m months, %d days, %H hours'

Output:

11 months, 15 days, 02 hours
  • This resets months count each year – Dani_l Oct 12 '15 at 15:29
0
#!/bin/bash

d=(60sec 60min 24hours 30days 12month 1000year)
i=0

while [ $1 -ge ${d[i]%%[a-z]*} ]
do
    set -- $(($1/${d[i]%%[a-z]*})) $(($1%${d[i]%%[a-z]*})) ${d[i]##*[0-9]} ${*:2}
    ((i++))
done 
echo $1 ${d[i]##*[0-9]} ${*:2}

Not the answer you're looking for? Browse other questions tagged or ask your own question.