我有一个时间戳,用于保存用户的上次访问信息,例如
时间 => 下午 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
命令无法计算持续时间。
这基本上就是我之前评论的内容:
您有一个时间戳:
ts1=$( date -d "08/23/2023 14:15:05" "+%s" )
你会得到第二个时间戳,无论你想要什么
ts2=$( date -d "now - 15 minutes" "+%s" )
以不同的方式计算差异:
$ 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 步。