最原始的辦法是寫個比較繁瑣的函式,知道每個月分別是多少天,還要處理一下閏年的情況――這也有點太繁瑣了。
稍微看一下 date 命令,就發現利用它可以很方便的寫出乙個非常穩定的函式。date 可以通過 -d 指定乙個日期,然後用指定的格式輸出。-d 不僅可以接受「2009-03-01″ 或者 yesterday 這樣的格式,還可以接受乙個從 1970 年開始至今的秒數,當然也可以指定日期輸出這樣的秒數。如:
1 [tmn@zhfx1 zhaoxj]$ date +%s21340181531
3 [tmn@zhfx1 zhaoxj]$ date-d @1340181531 +%y-%m-%d
42012-06-20
這樣,事情就變得很簡單了。先用 date 命令將該日期轉換成秒數,減去一天的秒數 86400,然後再轉化成正常易讀的日期格式,就可以了,不需要考慮複雜的大小月以及閏年問題。
用上述思路寫個函式:求出給定日期所在周的星期一是幾號
1get_day_monday( ) +%s`910
#給定日期為星期幾
11 v_week=`date -d $ +%u`
1213
#星期一是前幾天
14 days_before=$((v_week - 1
))15
16#距離星期一有多少秒
17 seconds_before=$((days_before * 86400
))18
19#星期一距離1970多少秒
20 monday_seconds=$((v_seconds -seconds_before))
2122 v_monday=`date -d @$monday_seconds +%y-%m-%d`
2324}25
26 get_day_monday 2012-06-20
2728
echo $
測試結果:
2012-06-18
unix date 命令獲取某日期的前一天
最原始的辦法是寫個比較繁瑣的函式,知道每個月分別是多少天,還要處理一下閏年的情況 這也有點太繁瑣了。稍微看一下 date 命令,就發現利用它可以很方便的寫出乙個非常穩定的函式。date 可以通過 d 指定乙個日期,然後用指定的格式輸出。d 不僅可以接受 2009 03 01 或者 yesterday...
Linux date 命令獲取某日期的前一天
date d 20150303 1day y m d date d 2 month 20131231 y m d 獲得2013年12月31日以後2個月的日期 這是最簡單的做法 稍微看一下 date 命令,就發現利用它可以很方便的寫出乙個非常 stable 的函式。date 可以通過 d 指定乙個日期...
計算某日期為當年第幾周演算法
1,資料庫計算 一周是從週日到週六 select datename week,getdate 一周是從周一到週日 set datefirst 1 select datename week,getdate 指示一周的第一天的乙個整數。可以是下列值之一。值一周的第一天是 1 星期一2 星期二3 星期三4...