# Calculate Days Since 1/1/1970

How can you calculate the number of days since 1/1/1970? This is for updating the shadowLastChange attribute on OpenLDAP.

Is there a way to do this using the linux date command?

-
In Bash and most modern Bourne-derived shells, `\$()` is preferred over backticks for readability and other reasons. `echo \$(( \$(date ...) / 86400 ))` – Dennis Williamson Jan 10 '11 at 14:03
Don't have 2000 yet... can someone edit and fix the title :-) – ringø Jan 10 '11 at 14:32

ring0 beat me by a few seconds, but the full command is:

``````echo \$((\$(date --utc --date "\$1" +%s)/86400))
``````

This goes by UTC time. Result:

``````root@hostname:~# echo \$((`date --utc --date "\$1" +%s`/86400))
14984
``````

A quick check with WolframAlpha shows that this is the correct value.

-
thanks for the fairness ;-) – ringø Jan 14 '11 at 18:29
what about leap seconds? :) – netvope Feb 21 '15 at 23:43
@netvope After an additional leap second, unix time is reset by one again. So each day adds exactly 86400 unix seconds. However, unix time 915148800 may stand for both UTC 1998-12-31T23:59:60 and 1999-01-01T00:00:00 en.wikipedia.org/wiki/Unix_time#Leap_seconds – Debilski Feb 1 at 12:14

The `date` command can give you the number of seconds since `1970-01-01 00:00:00 UTC`.

``````  date +"%s"
``````

You can divide the result by `3600*24` to get the number of days (UTC).

E.g. in Bash

``````  x=`date +"%s"` ; echo \$(( \$x / 3600 / 24 ))
``````

to display the number of days.

-

I think this is the simplest method:

``````expr \$(date +%s) / 86400
``````
-