Разница между двумя датами, выраженная в годах, месяцах, днях (в одном столбце) - PullRequest
1 голос
/ 18 марта 2019

У меня есть набор столбцов в Google Sheets, которые отображают разницу между двумя датами с помощью функции DATEDIF:

=DATEDIF (AS2, TODAY(), "D") 

(количество дней, прошедших сегодня с определенной даты)

=DATEDIF (AR11, AS11, "D")

(количество дней, прошедших между двумя определенными датами)

Значения представлены в виде числа (дней). Это хорошо для более коротких периодов, но для чего-то вроде 987 дней я хотел бы отобразить значение в нечто более интуитивное, например:

| 2 Years, 8 months, 17 days | 

Если это невозможно в одном и том же столбце, я бы по крайней мере хотел бы иметь набор из трех столбцов, которые отображают эту длительность в трех отдельных типах значений:

| 2 Years | 8 months | 17 days |

Простое изменение типа значения для каждого столбца (например, от дней до месяцев) будет достаточно простым, но я не уверен, как действовать, чтобы значения отображались относительно друг друга (и не просто иметь одинаковое значение будет отображаться в разных типах продолжительности).

Есть предложения, пожалуйста?

Ответы [ 3 ]

1 голос
/ 18 марта 2019
=IF(DATEDIF(A1, B1, "D")>365, QUOTIENT(DATEDIF(A1, B1, "D"), 365)&" year(s) "&
                          QUOTIENT(MOD(DATEDIF(A1, B1, "D"), 365), 30)&" month(s) "&
                      MOD(QUOTIENT(MOD(DATEDIF(A1, B1, "D"), 365), 30), 30)&" day(s)",
 IF(DATEDIF(A1, B1, "D")>30,  QUOTIENT(DATEDIF(A1, B1, "D"), 30)&" month(s) "&
                                   MOD(DATEDIF(A1, B1, "D"), 30)&" day(s)", 
                                       DATEDIF(A1, B1, "D")&" day(s)"))

0

1 голос
/ 18 марта 2019
=IF(                 DATEDIF(A2, B2, "D")> 365, 
      SPLIT(QUOTIENT(DATEDIF(A2, B2, "D"), 365)&" "&
        QUOTIENT(MOD(DATEDIF(A2, B2, "D"), 365), 30)&" "&
    MOD(QUOTIENT(MOD(DATEDIF(A2, B2, "D"), 365), 30), 30), " "),
 IF(                 DATEDIF(A2, B2, "D")> 30, 
 {"", SPLIT(QUOTIENT(DATEDIF(A2, B2, "D"), 30)&" "&
                 MOD(DATEDIF(A2, B2, "D"), 30), " ")},
            {"", "", DATEDIF(A2, B2, "D")}))

0

демонстрационная таблица

1 голос
/ 18 марта 2019

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

Пример:

Start Date End Date Result
28/1/19    1/3/19   1 month and 1 day
29/1/19    1/3/19   1 month and 1 day
30/1/19    1/3/19   1 month and 1 day
31/1/19    1/3/19   1 month and 1 day

Если вы принимаете этотогда должны работать следующие формулы:

Год

=datedif(A1,B1,"Y")

Месяц

=mod(datedif(A1,B1,"m"),12)

День

=IF(DAY(B1)>=DAY(A1),DAY(B1)-DAY(A1),DAY(EOMONTH(B1,-1))+DAY(B1)-MIN(DAY(A1),DAY(EOMONTH(B1,-1))))

enter image description here

РЕДАКТИРОВАТЬ

* Проверили это на на этом сайте и обнаружили, что он делает то же самое предположение - вы получаете ту же продолжительность (1 месяц и один день) с 28 января 19 года по 3 января 19 года с 31 января 19 января 193 года, хотя общее количество дней (32 или 29) отличается.

Возможным обходным решением является использование дней, оставшихся в начальном месяце

=IF(DAY(B1)>=DAY(A1),DAY(B1)-DAY(A1),DAY(EOMONTH(A1,0))-DAY(A1)+DAY(B1))

, что, по-видимому, согласуется с этим веб-сайтом

Вы также можете использовать аргумент MD для Datedif:

=datedif(A1,B1,"MD")

Но как в Google Sheets, так и в Excel это может привести к отрицательному числу, как указано в документации Excel :

The "MD" argument may result in a negative number, a zero, or an inaccurate result. If you are trying to calculate the remaining days after the last completed month...

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...