Как добавить месяц к дате в LibreOffice calc

23

Это кажется очевидным вопросом.

У меня есть столбец даты, и я хочу создать формулу, чтобы увеличить ее на один месяц для каждого столбца.

10/2013, 11/2013, 12/2013, 1/2014, 2/2014, ...

Как вы добавляете один месяц к дате?

trimbletodd
источник

Ответы:

16

В настоящее время одобренный ответ пропустит короткие месяцы, следующие за длинными

Установите A1 = 2014-01-31. Тогда результат с использованием = DATE (YEAR (A1), MONTH (A1) +1, DAY (A1)) будет 2014-03-03, таким образом пропуская февраль.

Подход EDATE, предложенный выше, теряет дни

Короткие месяцы приводят к тому, что EDATE отбрасывает дни подряд. Например, = EDATE (DATE (2014,1,31), 1) производит 2014-02-28, но его повторное применение приводит к 2014-03-28, который не является последним днем ​​марта.

Решение, которое действительно работает: увеличение месяцев с нулевым днем

Установите день на ноль и увеличивайте месяцы, оставаясь на месяц вперед. Например, чтобы начать в январе, используйте DATE (2014,2,0) => 2014-01-31, затем DATE (2014,3,0) => 2014-02-28, затем DATE (2014,4,0) -> 2014 -03-31, как и следовало ожидать, логически следуя последнему дню каждого месяца.

Другие подходы

Корректировки могут быть сделаны, если вы хотите, чтобы последний рабочий день месяца, или 30-дневные приращения, не пропуская месяцы и т. Д., Зависит от цели.


источник
edateработал для меня без проблем, о которых вы упомянули (Версия: 4.2.7.2)
Тим Абелл
1
Тим, чтобы увидеть ошибку редактирования, поместите в ячейку C4 = Дата (2014,01,31) и поместите в C7 = EDATE (C4,1), и он будет правильно отображаться 2014-02-28. однако теперь поместите в ячейку C8 = EDATE (C7,1), и это даст неправильное значение, 2014-03-28, которое не является последним днем ​​марта. Тим, ты видишь последний день марта на этом втором шаге? (Версия 3.5.4.2 - обновленная версия этого дистрибутива Debian)
1
Ах, теперь я понимаю, что вы имеете в виду. Спасибо за наглядный пример. Я забыл, что делал сейчас, но думаю, что не подошел к этому крайнему делу и не следовал тонкости того, что ты объяснил. Отличный пост.
Тим Абелл
19
=edate(a1;1)
  • edate возвращает дату, которая является указанным числом месяцев после или до указанной даты.
  • Первый аргумент редакции: дата начала.
  • Второй аргумент редакции: номер месяца. Если отрицательный, edate вычисляет дату раньше.
Тарик ФДИЛ
источник
2
никогда бы не догадался по названию! спасибо :-)
Тим Абелл
документация help.libreoffice.org/Calc/EDATE
Тим Абелл
1
Остерегайтесь проблем, когда в новом месяце нет эквивалентного дня месяца. superuser.com/a/774808/8271
Тим Абель
7

Как указано в ссылке: Дата Арифметика , это добавляет один к месяцу:

=DATE(YEAR(A1), MONTH(A1)+1, DAY(A1))
trimbletodd
источник
4
Помните, что если вы начнете в день, который не имеет эквивалента: например, 31 августа + 1 месяц рассчитывается как 1 октября, потому что нет 31 сентября.
Тим Абелл
0

Я думаю, что вам может понадобиться использовать метки, поскольку даты хранятся в виде цифр, которые затем отображаются в выбранном вами формате. Чтобы добавить месяц, вам понадобится сложный расчет, чтобы определить, сколько дней у вас уйдет на следующий месяц. Надеюсь я ошибаюсь и у кого-то есть ответ.

Briana
источник
Я также подумал о том, чтобы свести воедино сложный алгоритм добавления 31 дня к дате, а затем вернуться к первому числу месяца. Оба пути кажутся слишком сложными.
trimbletodd
На этом сайте могут быть некоторые идеи, которые могут вам помочь. cpearson.com/excel/datearith.htm
BrianA
Отличная ссылка. Похоже, это работает.
trimbletodd
0

FWIW, это решение, которое я использовал, когда имеет значение месяц и год:

A1=DATE(2016,1,1)
A2=EOMONTH(A1,0)+1

Первая строка ячейки, чтобы установить дату начала в качестве объекта даты. Следующие ячейки берут предыдущую ячейку, получают конец месяца, затем добавляют день ( A2 = 2016/01/31 + 1). Работает как для LibreOffice Calc, так и для электронных таблиц Google.

Тиен
источник
0

Для года, месяца, дня с приращением на один месяц, в тот же день месяца (как в последний день для високосных годов):

A1 "DATE" # Label of column
A2 "=DATE(2011, 2, 0)"
A3 "=EDATE(A$2,COUNTA(A$2))"
A4 "=EDATE(A$2,COUNTA(A$2:A3))"

Затем перетащите А4 вниз, насколько вам нравится. Производит этот вывод:

01/31/11
02/28/11
03/31/11
...
02/29/12
03/31/12
Мэтт Кнайзер
источник