Неправильный расчет даты по дате в Ubuntu 16, 20

Неправильный расчет даты по дате в Ubuntu 16, 20

Самая странная вещь происходит с расчетом даты из-за того, что вы видите ниже; обратите внимание, что добавление одного месяца к 31 октября превращает его в декабрь! Этого не может быть? У меня та же проблема на Ubuntu 16 и 20. Эта проблема также приводит к тому, что мой скрипт оболочки выдает неправильную дату, так что это не только планировщик cron.

root@ubuntugc:/home/miuser# date -d "20210930+1 month" +%Y-%m-%d
2021-10-30
root@ubuntugc:/home/miuser# date -d "20211030+1 month" +%Y-%m-%d
2021-11-30
root@ubuntugc:/home/miuser# date -d "20211031+1 month" +%Y-%m-%d
2021-12-01

решение1

Вот как это dateработает, при сложении 1 monthон просто увеличивает месяц на один, в вашем случае 2021-11-31это дата, которая не существует, поэтому он затем перемещает результат на один день вперед к допустимой дате ( 2021-12-01). Отдокументация coreutils:

Неточность в единицах измерения может вызвать проблемы с относительными элементами. Например, «2020-07-31 -1 месяц» может быть оценено как 2020-07-01, поскольку 2020-06-31 — недопустимая дата. Чтобы более надежно определить предыдущий месяц, вы можете запросить месяц до 15-го числа текущего месяца. Например:

Связанный контент