计算 UNIX 时间时将日期数学舍入到最近的月份

Round date math to nearest month while calculating UNIX time

我想获取当前偏移量的 UNIX 时间戳值(自 1970 年 1 月 1 日以来的秒数),同时将结果四舍五入到月初。

基本上我想要这个输出——从当前日期算起的两个月,但是那个月的第一天。

date -d "2019-04-01" "+%s"
1554102000

但是我不想手动添加日期。我想做类似的事情:

date -d +"%Y%m" --date="+2 month" +"%s"
1555973219

但不幸的是,这给了我不正确的时间戳(结果没有四舍五入到月初)。

证明这一切在使用 GNU 时都能正常工作 date:

set -x
date
start_of_2mo_hence=$(date -d 'now + 2 months' +%Y-%m-01)
start_of_2mo_hence_sec=$(date -d "$start_of_2mo_hence" +%s)
date -d "@$start_of_2mo_hence_sec"

...发出:

+ date
Fri Feb 22 17:04:49 CST 2019
++ date -d 'now + 2 months' +%Y-%m-01
+ start_of_2mo_hence=2019-04-01
++ date -d 2019-04-01 +%s
+ start_of_2mo_hence_sec=1554094800
+ date -d @1554094800
Mon Apr  1 00:00:00 CDT 2019

当然,这可以简化为:

start_of_2mo_hence_sec=$(date -d "$(date -d 'now + 2 months' +%Y-%m-01)" +%s)

如果我明白你想做什么。这应该可以完成它,并始终为您提供 2 个月后开始的秒数。

date +"%Y-%m" -d "+2 month" | xargs -i date -d "{}-1" "+%s"
1554091200

虽然看起来我们处在不同的时区。您可以添加时区或将 UTC 标志添加到语句的 xargs 部分。