在shell中计算秒数、分钟数和天数

在shell中计算秒数、分钟数和天数

我有一个时间戳,用于保存用户的上次访问信息,例如

时间 => 下午 14:15:05

日期 => 2023 年 8 月 23 日

根据保存的信息,我想编写一个命令,返回与现在 2023 年 8 月 23 日下午 15:15:14 的时间相比已经过了多少时间,格式如下

=> 30秒前

=> 12分钟前

=> 4 小时前

=> 11天前

=> 1 年前

我到目前为止尝试过的方法

日期 -d'上午 7:00:00 - 15 分钟''+%H:%M'

但这只会根据规定的时间上午 7:00:00 返回 15 分钟前已定义的时间并将其值降低到 15 分钟前。

我想要的是根据现在的实际时间(2023 年 8 月 23 日下午 15:15:14)计算自 2023 年 8 月 23 日 14:15:05 或 2023 年 8 月 22 日前一天以来已经过去了多少时间。

答案1

date命令无法计算持续时间。

这基本上就是我之前评论的内容:

  1. 您有一个时间戳:ts1=$( date -d "08/23/2023 14:15:05" "+%s" )

  2. 你会得到第二个时间戳,无论你想要什么ts2=$( date -d "now - 15 minutes" "+%s" )

  3. 以不同的方式计算差异:

    $ printf '%(%F %T)T minus %(%F %T)T is %d %s\n' "$ts1" "$ts2" "$((ts1-ts2))" seconds
    2023-08-23 14:15:05 minus 2023-07-24 19:07:25 is 2574460 seconds
    
    $ printf '%(%F %T)T minus %(%F %T)T is %d %s\n' "$ts1" "$ts2" "$(( (ts1-ts2) / 60 ))" minutes
    2023-08-23 14:15:05 minus 2023-07-24 19:07:25 is 42907 minutes
    
    $ printf '%(%F %T)T minus %(%F %T)T is %d %s\n' "$ts1" "$ts2" "$(( (ts1-ts2) / (60*60) ))" hours
    2023-08-23 14:15:05 minus 2023-07-24 19:07:25 is 715 hours
    
    $ printf '%(%F %T)T minus %(%F %T)T is %d %s\n' "$ts1" "$ts2" "$(( (ts1-ts2) / (60*60*24) ))" days
    2023-08-23 14:15:05 minus 2023-07-24 19:07:25 is 29 days
    

我认为我们的误解在于如何完成第 2 步。

如果您不想手动执行此操作,许多语言都有可以计算持续时间的日期模块: perlPython

相关内容