这是一个直接进行计算的解决方案。
def roundto(n): (./n|floor)*n ;
def timefmt(ms):
def calcsecs: .s_to_m = (.seconds | roundto(60)) | .secs = .seconds - .s_to_m ;
def calcmins: .minutes = .s_to_m/60 | .m_to_h = (.minutes | roundto(60)) | .mins = .minutes - .m_to_h ;
def calchrs: .hours = .m_to_h/60 | .h_to_d = (.hours | roundto(24)) | .hrs = .hours - .h_to_d ;
def calcdays: .days = .h_to_d/24 ;
def fmtelt(e;u): if e>0 then " \(e)\(u)" else "" end ;
def fmt:
.s = " \(.secs)s"
| .m = fmtelt(.mins; "m")
| .h = fmtelt(.hrs; "h")
| .d = fmtelt(.days; "d")
| "\(.d)\(.h)\(.m)\(.s)"[1:]
;
{seconds: (ms/1000)|floor} | calcsecs | calcmins | calchrs | calcdays | fmt
;
timefmt($ms)
Run Code Online (Sandbox Code Playgroud)
如果这个过滤器在filter.jq的话
$ jq -Mnr --argjson ms 1505752580000 -f filter.jq
Run Code Online (Sandbox Code Playgroud)
输出
17427d 16h 36m 20s
Run Code Online (Sandbox Code Playgroud)
对于较小的间隔,仅显示相关字段。例如
$ jq -Mnr --argjson ms 1505750 -f filter.jq
Run Code Online (Sandbox Code Playgroud)
输出
25m 5s
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1046 次 |
| 最近记录: |