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

问题描述 投票:-1回答:2

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

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

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

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

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

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

linux bash unix-timestamp
2个回答
1
投票

使用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
投票

如果我明白你想做什么。这应该完成它,并始终给你从现在起2个月的月初。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.