Математическая дата округления до ближайшего месяца при расчете времени UNIX - PullRequest
0 голосов
/ 23 февраля 2019

Я хочу получить значение метки времени UNIX (секунды с 1 января 1970 года) для смещения от настоящего, округляя результат до начала месяца.

По сути, я хочу этот вывод - двамесяцы с текущей даты, но первый день этого месяца.

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

Однако я не хочу добавлять дату вручную.Я хочу сделать что-то похожее на это:

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

, но, к сожалению, это дает мне неправильную метку времени (результат не округляется до начала месяца).

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Если я понимаю, что вы хотите сделать.Это должно сделать это и всегда давать вам секунды начала месяца через 2 месяца.

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

Хотя, похоже, мы находимся в разных часовых поясах.Вы можете добавить часовой пояс или добавить флаг UTC в часть оператора xargs.

0 голосов
/ 23 февраля 2019

Демонстрируя, что все это работает правильно при использовании 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)
...