Форматирование временного интервала в виде количества дней, часов и минут

#excel #excel-formula

#excel #excel-формула

Вопрос:

Это чисто вопрос листа Excel.

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

Мне удалось получить разницу во времени в количестве часов и минут, изменив формат чисел на [h]:mm . Теперь я хотел бы получить разницу в количестве дней, часов и минут. Я попытался установить числовой формат [d]:[h]:[mm] , но он не принимается Excel.

Вот что у меня есть сейчас:

     A                   B                   C (=A2-A1)
    ----------------    ----------------    ----------
1|  14/10/2011 00:00    17/10/2011 07:50    79:50
2|  14/10/2011 00:00    17/10/2011 11:00    83:00
  

Вот что я хотел бы получить:

     A                   B                   C (=A2-A1)
    ----------------    ----------------    ----------
1|  14/10/2011 00:00    17/10/2011 07:50    3:7:50
2|  14/10/2011 00:00    17/10/2011 11:00    3:11:00
  

Как я могу это сделать? Доступен ли для этого числовой формат?

Ответ №1:

Вы можете использовать TEXT
= TEXT(B1-A1,"d:h:mm")

Обратите внимание, что того же эффекта можно добиться, используя простой числовой формат непосредственно для ячеек

  • выберите свой диапазон (ячейки C1, C2 и т. Д.)
  • щелкните правой кнопкой мыши и отформатируйте ячейки
  • Пользовательский
  • Тип d:hh:mm

Если, в отличие от данных вашего примера, разница в датах превышает 31 день, то такой подход, как =INT(B1-A1)amp;":"amp;TEXT(B1-A1,"h:mm")
будет работать

Комментарии:

1. Хорошо, и я бы использовал TEXT(B1-A1; IF(B1-A1>1; "d:hh:mm"; "h:mm")) для получения числа дней только в том случае, если разница во времени превышает один день.

2. @tosh что вы имеете в виду, это не принимается Excel?

3. @Toshe: использовать ТЕКСТ (B1-A1; «d: h: m»)

Ответ №2:

Предупреждение: приведенное выше работает только для диапазонов менее 31 дня. используйте

 =CONCATENATE(TEXT(FLOOR(B1-A1,1),"@")," Days",TEXT(B1-A1," h:mm:ss"))
  

вместо этого для диапазонов выше 31 дня. Это приведет к неправильной сортировке, поэтому было бы лучше выполнить вычисления в одном столбце, а затем изменить этот столбец для конечного результата.

Комментарии:

1. Спасибо, это то, что я искал, когда пришел сюда из Google. Но вместо этого он должен быть «FLOOR (B1-A1,0)», почему вы хотите сохранить дробную часть дней?

2. Я получаю #DIV / 0! если я использую FLOOR(<что угодно>, 0). Вторым параметром является «значение», а не «количество сохраняемых знаков после запятой». Вы могли бы успешно указать ‘0.1’ или ‘0.01’ для сохранения десятичных знаков, но не ‘0’ для их устранения. В этом случае «1» является правильным, поскольку это ЭТАЖ до ближайшего «1».

Ответ №3:

К сожалению, оказывается, что форматы number и datetime не могут быть объединены, в противном случае пользовательский формат:

 0:h:m
  

это был бы билет. Однако, если для интервалов в 32 дня или более вас устраивает просто отображение количества (дробных) дней, вы можете использовать пользовательский формат, например:

 [>=32] 0.00 "days"; d:h:m
  

Значение ячейки остается числовым.

Комментарии:

1. На самом деле это работает лучше всего для меня, но для предотвращения путаницы из-за ##:##:## формата обычно рассматривается как hh:mm:ss , я использовал следующее: [>=32] 0.00 "days";[<1] h:m:s; d h:m:s , Этот формат переводится в 34.25 days , 4 15:44:10 2:15:33 .

Ответ №4:

Следующая, конечно, не самая короткая формула и не является прямым ответом на вопрос, но работает, чтобы показать правильный результат (также в LibreOffice) в следующем формате:

# дни ## часы ## минуты ## секунды

 =CONCATENATE(TEXT(FLOOR(B2-A2,1),"@")," days ", IF(HOUR(A12)-HOUR(A11)<0,HOUR(A12)-HOUR(A11) 24,HOUR(A12)-HOUR(A11))," hours ",IF(MINUTE(A12)-MINUTE(A11)<0,MINUTE(A12)-MINUTE(A11) 60,MINUTE(A12)-MINUTE(A11)), " minutes ", TEXT(B2-A2,"s"), " seconds")
  

Ответ №5:

Следующий подход также работает, предполагая, что ваша дата начала указана в ячейке C2, а дата окончания — в ячейке D2:

  =TEXT((D2-C2)-MOD(D2-C2,1),"0") amp; " days " amp; TEXT(MOD(D2-C2,1),"hh:mm")
  

Комментарии:

1. (D2-C2)-MOD(D2-C2,1) может быть упрощено до просто INT(D2-C2) не так ли?

Ответ №6:

=IFERROR(INT(Date1-Date2)amp;" Days "amp;INT(MOD((Date1-Date2);INT(Datw1-Date2))*24)amp;" Hours "amp;MINUTE(Fate1-Date)amp;" Min";IFERROR((Date1-Date2);"NA"))enter code here

Я думаю, это должно сработать, какая бы дата у вас ни была.

Ответ №7:

У меня был подобный вопрос, кроме меня, мне нужны были часы, разделенные на 8, а не на 24, поскольку мне нужны были рабочие дни. Итак, я придумал решение, но оно действительно очень сложное для понимания, потому что код выглядит как беспорядок, но если вы сегментируете их, это не так сложно.

 =CONCAT(INT(C16*24/8),":",IF(INT((C16-INT(C16))*24)<10,CONCAT("0",INT((C16-INT(C16))*24)),INT((C16-INT(C16))*24)),":",IF(MINUTE(C16)<10,CONCAT("0",MINUTE(C16)),MINUTE(C16)))
  
  • Обратите внимание, что я использовал «8«, чтобы разделить часы на 8, потому что мне нужно было рабочее время. Таким образом, вы можете пренебречь этим, если вы этого не хотите
  • Мне нужно было отобразить результат как «4: 09: 08«, а не «4: 9: 8«. (Это в формате «Дни: часы: минуты»). Вот почему я использовал дополнительные функции IF() и CONCAT() внутри.