2017-01-10 202 views
4

我試圖找出兩天之間沒有日期的日期。以下是我在UNIX上完美運行的代碼。使用Bash計算AIX中兩個日期之間的天數

date1=$(date "+%m/%d/%y") 
temp1=4/8/24 
echo $((($(date -u -d $temp1 +%s) - $(date -u -d $date1 +%s))/86400)) 

當我上面的腳本在AIX上盒執行,我得到以下錯誤:

date: Not a recognized flag: d

Usage: date [-u] [+"Field Descriptors"]

date: Not a recognized flag: d

Usage: date [-u] [+"Field Descriptors"]

(-)/86400: syntax error: operand expected (error token is ")/86400")`

這是一個PROD env和我沒有管理員權限,以在其上安裝任何包。

+0

你有訪問Perl或AWK?請看:http://unix.ittoolbox.com/groups/technical-functional/unixadmin-l/shell-script-to-find-noofdays-between-two-dates-in-aix-server-5591705 – Cyrus

+0

有awk NOT Gawk在aix盒子上。 – user0

+0

AIX上似乎沒有標記'd'的日期。查看AIX日期命令的信息:https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/com.ibm.aix.cmds2/date.htm –

回答

1

這假定一個月是一年的1/12,而你使用正確的4位 年:

#!/usr/bin/awk -f 
function mktm(datespec) { 
    split(datespec, q, "/") 
    return \ 
    (q[3] - 1970) * 60 * 60 * 24 * 365.25 + \ 
    (q[1] - 1) * 60 * 60 * 24 * 365.25/12 + \ 
    (q[2] - 1) * 60 * 60 * 24 
} 
function ceil(x) { 
    y = int(x); return y < x ? y + 1 : y 
} 
BEGIN { 
    srand() 
    print ceil((mktm(ARGV[1]) - srand())/(60 * 60 * 24)) 
} 
相關問題