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)
Asked
Active
Viewed 1.1k times
3
-
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
-
7Possible 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
-
https://github.com/hroptatyr/dateutils is the best bet so far. – Deer Hunter Oct 12 '15 at 14:42
2 Answers
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

A.P.
- 1,416
- 9
- 11
-
-
Yeah, this doesn't work. Here's what I get:
d1="03/26/2022"
d2=$(date +%m/%d/%Y)
date --date=@$(($d1 - $d2)) +%m-%d-%H
12-31-19
– Jay Imerman Dec 07 '21 at 13:52
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}

Costas
- 14,916