首先咱們先來講說什麼是shell下的時間戳:node
自1970年1月1日(00:00:00 UTC/GMT)以來的秒數。它也被稱爲Unix時間戳(Unix Timestam、Unix epoch、POSIX time、Unix timestamp)是從1970年1月1日(UTC/GMT的午夜)開始所通過的秒數,不考慮閏秒。shell
UNIX時間戳的0按照ISO 8601規範爲:1970-01-01T00:00:00Z 一個小時表示爲UNIX時間戳格式爲:3600秒;一天表示爲UNIX時間戳爲86400秒,閏秒不計算。bash
shell下的時間加減法就是根據時間戳來實現的,時間戳對咱們在shell下的操做很是的有用:ide
好比:計算某天的時間戳,也就是指定的某一個到1970年1月1日以來的秒數:spa
//從2014-12-05 19:45:44到1970-1-1總共的秒數 [root@node1 shell]# date -d "2014-12-05 19:45:44" +%s 1417779944 //若是知道某個時間戳,也能夠計算出這個時間戳對應的時間日期 [root@node1 shell]# date --date=@1417779944 Fri Dec 5 19:45:44 CST 2014 [root@node1 shell]# date -d @1417779944 Fri Dec 5 19:45:44 CST 2014
知道這些以後那咱們就能夠計算某一天距離今天過了多少天了:
orm
#!/bin/bash # first_stamp=`date -d "2014-12-05 19:45:44" +%s` #計算指定日期的時間戳 today_stamp=`date +%s` #計算當天的時間戳 let day_stamp=($today_stamp - $first_stamp) #當天的時間戳減去指定的時間戳 let day=($day_stamp/86400) #相差的時間戳除以一天的秒數就獲得天數 echo $day
如下還有一些時間的計算方法:it
[root@node1 shell]# echo $(date --date='3 day') //當天日期+3天 Fri Jan 16 11:55:02 CST 2015 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 day ago') //當天日期-3天 Sat Jan 10 11:55:10 CST 2015 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 month') //當天日期+3月 Mon Apr 13 11:55:17 CST 2015 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 month ago') //當天日期-3朋 Mon Oct 13 11:55:25 CST 2014 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 year') //當天日期+3年 Sat Jan 13 11:55:32 CST 2018 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 year ago') //當天日期-3年 Fri Jan 13 11:55:38 CST 2012 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 minute ') //當天日期+3秒 Tue Jan 13 11:58:44 CST 2015 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 minute ago') //當天日期-3秒 Tue Jan 13 11:52:52 CST 2015 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 hour ago') //當天日期-3小時 Tue Jan 13 08:56:00 CST 2015 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 hour') //當天日期+3小時 Tue Jan 13 14:56:06 CST 2015 [root@node1 shell]#