%b %d %Y 格式的两个日期之间的差异
Posted
技术标签:
【中文标题】%b %d %Y 格式的两个日期之间的差异【英文标题】:Differences between two dates with %b %d %Y format 【发布时间】:2021-09-14 02:46:31 【问题描述】:我希望在找出两个日期之间的天数差异方面获得一些帮助。
日期 1:系统日期
日期 2:2022 年 3 月 20 日(未来)
我试图做的是将其转换为 EPOCH 时间,减去然后除以 86400 以获得两个日期之间的天数。但是,我遇到了系统税问题。这是我尝试过的:
days_remaining=('date "+%s" -d "Mar 20 2022"'-'date "+%s" -d "$(date '+%b %d %Y')"')/86400
但上述方法不起作用。任何帮助将不胜感激。
【问题讨论】:
这能回答你的问题吗? How to find the difference in days between two dates? 【参考方案1】:要在 bash 中进行计算,您需要一个算术上下文 (( ))
。此外,要执行您的date
命令,您必须将它们放在$()
中,而不是字符串引号''
。
顺便说一句:date "+%s" -d "$(date '+%b %d %Y')
中的最后一个 date
命令不是必需的。 date -d 0:00 +%s
将打印相同的 unix 时间。
(( days_remaining = ($(date -d "Mar 20 2022" +%s) - $(date -d 0:00 +%s)) / 86400 ))
【讨论】:
我们必须将结果加 1,因为Mar 20 2022
将有下午 0:00。当当前日期将当前时间设置为时间时,设置为时间。当发生除以 86400 时,差值将被截断一天。您可以通过尝试计算直到明天而不是直到Mar 20 2022
的剩余天数来检查这一点。结果应该是1
,但上面的公式给出了0
。
@PierreFrançois 谢谢。很好的观察。在当前时间正好是午夜 (00:00
) 的极少数情况下,总是添加 1d 会给出错误的结果。因此,我通过添加 24h-1s 来四舍五入到一整天。
另一方面,使用date -d 0:00
获取今天开始的unix 时间可能更容易。我又改了答案。【参考方案2】:
你可以用这个
days_remaining=$(($(($(date "+%s" -d "Mar 20 2022") - $(date "+%s" -d "$(date '+%b %d %Y')"))) / 86400))
【讨论】:
以上是关于%b %d %Y 格式的两个日期之间的差异的主要内容,如果未能解决你的问题,请参考以下文章