%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 格式的两个日期之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 中两个日期的年、月、日之间的差异

MYSQL:使用 date_format 查询两个日期之间的数据不起作用

PHP查找两个日期时间之间的差异

Laravel中两个日期之间的差异

如何获得两个日期之间的差异(informix)?

具有共同 id 的组中具有最大天数的两个日期之间的差异