Руководство дат между датами

Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 SharePoint Foundation 2010 Excel 2010 SharePoint Server 2010 Excel 2007 Excel для Mac 2011 Excel Starter 2010 Windows SharePoint Services 3.0 Еще…Меньше

Вычисляет количество дней, месяцев или лет между двумя датами.

Предупреждение: Функция РАЗНДАТ предлагается в Excel для поддержки старых книг Lotus 1-2-3. В некоторых ситуациях она может выдавать неправильные результаты. Дополнительные сведения см. в разделе «Известные проблемы» в этой статье.

Синтаксис

РАЗНДАТ(нач_дата,кон_дата,единица)

Аргумент

Описание

start_date   

Обязательный

Дата, которая представляет первую или даты начала заданного периода. Даты можно вводить в виде текстовых строк в кавычках (например, «30.1.2001»), в виде порядковых номеров (например, 36921 представляет 30 января 2001 г., если используется система дат 1900) или как результаты вычисления других формул или функций (например ДАТАЗНАЧ(«30.1.2001»)).

end_date   

Обязательный

Дата окончания периода.

Единица   

Тип возвращаемой информации, где:

Единица

Возвращаемое значение

«Y«

Количество полных лет в периоде.

«M«

Количество полных месяцев в периоде.

«D«

Количество дней в периоде.

«MD«

Разница в днях между начальной и конечной датой. Месяцы и годы дат не учитываются.

Важно: Не рекомендуется использовать аргумент «MD», так как с ним связаны определенные ограничения. См. раздел «Известные проблемы» ниже.

«YM«

Разница в месяцах между начальной и конечной датой. Дни и годы дат не учитываются.

«YD«

Разница в днях между начальной и конечной датой. Годы дат не учитываются.

Замечания

  • Даты хранятся в виде последовательных чисел, что позволяет использовать их в вычислениях. По умолчанию дате 1 января 1900 года соответствует номер 1, а 1 января 2008 года — 39448, так как интервал между этими датами составляет 39 447 дней.

  • Функция РАЗНДАТ полезна в формулах расчета возраста.

  • Если онtart_date больше, чем end_date,результат будет #NUM!.

Примеры

нач_дата

кон_дата

Формула

Описание (результат)

1.1.2001

1.1.2003

=РАЗНДАТ(нач_дата,кон_дата,»Y»)

Два полных года в периоде (2).

1.6.2001

15.8.2002

=РАЗНДАТ(нач_дата,кон_дата,»D»)

440 дней между 1 июня 2001 г. и 15 августа 2002 г. (440)

1.6.2001

15.8.2002

=РАЗНДАТ(нач_дата,кон_дата,»YD»)

75 дней между 1 июня и 15 августа без учета годов дат (75)

Известные проблемы

При использовании аргумента «MD» результатом может быть отрицательное число, нуль или неверное значение. Если вы пытаетесь вычислить оставшиеся дни после последнего полного месяца, вот как можно это сделать:

=РАЗНДАТ(D17;E17;"md"), результат: 5

Эта формула вычитает первый день окончания месяца (01.05.2016) из исходной даты окончания в ячейке E17 (06.05.2016). Вот как это делается: сначала функция ДАТА создает дату 01.05.2016. Она создается с помощью года в ячейке E17 и месяца в ячейке E17. 1 обозначает первый день месяца. Результатом функции ДАТА будет 01.05.2016. Затем мы вычитаем эту дату из исходной даты окончания в ячейке E17 (06.05.2016), в результате чего получается 5 дней.

Дополнительные сведения

Вы всегда можете задать вопрос эксперту в Excel Tech Community или получить поддержку в сообществах.

См. также

Функции Excel (по алфавиту)

Функции Excel (по категориям)

Рекомендации, позволяющие избежать появления неработающих формул

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

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

Imagine you are in a scenario where you need to construct a table that is organized by date. For instance, you are making a schedule and need to specify a list of activities arranged by date in the appropriate order. You would require a list of dates in the event that this occurs.

There is no such thing as a limitless list, so it stands to reason that the one you would have a beginning and an end date. In certain circumstances, if you already know the date at which you want to begin and the date at which you want to finish, you may need to use Excel to create a list of all the dates that fall in between these two specified days.

List all Dates using Formula

Let’s understand step by step through an example.

Step 1

In our example, we have Start Date and End Date in an Excel sheet. We will create a list the dates in between the starting date and ending date. See the following image.

Step 2

Then type the below given formula in C2 cell and press enter. The formula is =A2+1 where A2 is the cell in which starting date is written. After pressing Enter, you will see the next date of starting date. See the following image.

Step 3

After that, select the cell C3 and type the below given formula in formula bar and press enter.

=IF($A$2+ROW(A2)>=$B$2,"",C2+1)

Step 4

Click the «+» sign appears on the lower right corner of the cell C3, which activates the autofill function and then drag down to reflect in other cells.

The difficulty in defining the syntax or making modifications to this formula is the primary drawback to using it. In addition to this, the dates aren’t quite in the correct order.

List All Dates Using VBA

If you are interested in macro code, the following Visual Basic for Applications (VBA) can be used in Excel to list any dates that fall between two specified dates.

Follow the steps given below −

Step 1

Enter the Start date and the End date into separate cells.

Step 2

To open the Microsoft Visual Basic for Applications window, press the «Alt + F11» keys simultaneously.

Step 3

Then click Insert > Module and the popup Module window will open.

This is the VBA editor.

Step 4

In the Module window, type the following VBA code.

Sub DatesBetween()
    Dim rng As Range
    Dim StartRng As Range
    Dim EndRng As Range
    Dim OutRng As Range
    Dim StartValue As Variant
    Dim EndValue As Variant
    xTitleId = "VBOutput"
    Set StartRng = Application.Selection
    Set StartRng = Application.InputBox("Start Range (single cell):", xTitleId, StartRng.Address, Type:=8)
    Set EndRng = Application.InputBox("End Range (single cell):", xTitleId, Type:=8)
    Set OutRng = Application.InputBox("Out put to (single cell):", xTitleId, Type:=8)
    Set OutRng = OutRng.Range("A1")
    StartValue = StartRng.Range("A2").Value
    EndValue = EndRng.Range("A2").Value
    If EndValue - StartValue <= 0 Then
        Exit Sub
        End If
        ColIndex = 0
        For i = StartValue To EndValue
            OutRng.Offset(ColIndex, 0) = i
            ColIndex = ColIndex + 1
        Next
    End Sub

Step 5

Click Run or F5 to run the VBA, a window pops up where you will choose the starting date, then click OK, then in the next window, choose the Ending date, then click OK.

Then another window pops up asking Output to, give the output cell and click OK.

In our example, the Cell value of Starting Date is A2, so we write it in this way: «A2″.

In our example, the Cell value of Ending Date is B2, so we write it in this way: «B2″.

In our example, the Cell value of Output Date is C2, so we write it in this way: «C2″.

After clicking OK, close the VBA window and you will get the dates between the starting and ending dates, including both starting and ending dates, as shown in the following image.

Conclusion

In this tutorial, we showed two different ways (Formula and VBA) that you can use to list all the dates between two given dates in Excel.

  • Related Articles
  • How to Extract All Records Between Two Dates in Excel?
  • How To Create A Dynamic Chart Between Two Dates (Based On Dates) In Excel?
  • How to calculate average between two dates in Excel?
  • Return all dates between two dates in an array in PHP
  • How to calculate the midpoint between two dates in Excel?
  • How to calculate the percentage between two dates in Excel?
  • How to Count Unique Values Between Two Dates in Excel?
  • How to store all dates in an array present in between given two dates in JavaScript?
  • How to create a vector with dates between two dates in R?
  • How to calculate the weeks and days between two dates in Excel?
  • How To Count Records Between Two Dates With Matching Criteria In Excel
  • How To Count The Days Excluding Sundays Between Two Dates In Excel?
  • How To Count Number Of Leap Years Between Two Dates In Excel?
  • How to generate k random dates between two other dates using Python?
  • How to Count the Number of Weekends/Weekdays Between Two Dates in Excel?
Kickstart Your Career

Get certified by completing the course

Get Started

Автозаполнение ячеек с датами с помощью формулы

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

заданный диапазон дат в Excel
даты начала и конца периода

Для решения задачи нужно сначала рассчитать приращение на единицу к начальной дате периода, как показано ниже:

промежуточный расчет в Excel
приращение к начальной дате на единицу

Затем нужно вписать в ячейку ниже следующее выражение

=ЕСЛИ($A$1+СТРОКА(A1)>=$A$2-1;»»;C1+1)

формула расчёта дат в excel

Далее нужно протянуть перекрестие автозаполнения вниз и вы увидите, что последней заполненной будет дата окончания периода.

результат выполнения операции в excel
Заполнение датами периода

Еще простой вариант автозаполнения периода между датами

В Лгещщды есть специальный инструмент для рандомного (случайного) вставки случайных чисел. Вызывается команда из группы команд «Вставить» — «Вставка случайных чисел»

надстройка для генерации случайных чисел в excel
Вызов команды «Вставка случайных чисел»
вставка случайных чисел в excel
Диалоговое окно «Вставка случайных чисел»

В диалоговом окне следует указать даты начала и окончания периода между которым нужно сгенерировать даты. Указываем, что даты должны быть уникальными, выделяем диапазон ячеек, куда нужно будет вставить даты и нажимаем «Ок»

генератор случайных дат в Excel
надстройка для генерации дат в Excel

Даты генерированы в нужном диапазоне но расставлены беспорядочно. Вызываем сортировку и сортируем по порядку возрастания или убывания, как нам нужно.

сортировка дат в excel
Отсортированные сгенерированные даты в нужном диапазоне

2.1. Использованиеjava.util.Date для определения разницы в днях

Давайте начнем с использования основных API-интерфейсов Java для расчета и определения количества дней между двумя датами:

@Test
public void givenTwoDatesBeforeJava8_whenDifferentiating_thenWeGetSix()
  throws ParseException {

    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH);
    Date firstDate = sdf.parse("06/24/2017");
    Date secondDate = sdf.parse("06/30/2017");

    long diffInMillies = Math.abs(secondDate.getTime() - firstDate.getTime());
    long diff = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);

    assertEquals(diff, 6);
}

2.2. Использованиеjava.time — начиная с Java 8

Теперь вычисление разницы станет более интуитивным, если мы используемLocalDate, LocalDateTime для представления двух дат (со временем или без него) в сочетании сPeriod иDuration:.

РазницаLocalDate:

@Test
public void givenTwoDatesInJava8_whenDifferentiating_thenWeGetSix() {
    LocalDate now = LocalDate.now();
    LocalDate sixDaysBehind = now.minusDays(6);

    Period period = Period.between(now, sixDaysBehind);
    int diff = period.getDays();

    assertEquals(diff, 6);
}

СлучайLocalDateTime:

@Test
public void givenTwoDateTimesInJava8_whenDifferentiating_thenWeGetSix() {
    LocalDateTime now = LocalDateTime.now();
    LocalDateTime sixMinutesBehind = now.minusMinutes(6);

    Duration duration = Duration.between(now, sixMinutesBehind);
    long diff = Math.abs(duration.toMinutes());

    assertEquals(diff, 6);
}

Here ‘немного подробнее об этом API.

2.3. Использованиеjava.time.temporal.ChronoUnit для определения разницы в секундах

API времени в Java 8 представляет собой единицу даты и времени, например секунды или дни, используяTemporalUnit interface. Each unit provides an implementation for a method named between to calculate the amount of time between two temporal objects in terms of that specific unit.

Например, чтобы вычислить секунды между двумяLocalDateTimes:

@Test
public void givenTwoDateTimesInJava8_whenDifferentiatingInSeconds_thenWeGetTen() {
    LocalDateTime now = LocalDateTime.now();
    LocalDateTime tenSecondsLater = now.plusSeconds(10);

    long diff = ChronoUnit.SECONDS.between(now, tenSecondsLater);

    assertEquals(diff, 10);
}

ChronoUnit предоставляет набор конкретных единиц времени, реализуя интерфейсTemporalUnit. It’s highly recommended to static import the ChronoUnit enum values to achieve more readability:

import static java.time.temporal.ChronoUnit.SECONDS;

// omitted
long diff = SECONDS.between(now, tenSecondsLater);

Кроме того, мы можем передать любые два совместимых временных объекта методуbetween , дажеZonedDateTime.

Что замечательно вZonedDateTime, так это то, что расчет будет работать, даже если они установлены в разные часовые пояса:

@Test
public void givenTwoZonedDateTimesInJava8_whenDifferentiating_thenWeGetSix() {
    LocalDateTime ldt = LocalDateTime.now();
    ZonedDateTime now = ldt.atZone(ZoneId.of("America/Montreal"));
    ZonedDateTime sixMinutesBehind = now
      .withZoneSameInstant(ZoneId.of("Asia/Singapore"))
      .minusMinutes(6);

    long diff = ChronoUnit.MINUTES.between(sixMinutesBehind, now);

    assertEquals(diff, 6);
}

2.4. Используяjava.time.temporal.Temporaluntil()

Любой объектTemporal, например LocalDate or ZonedDateTime, provides an until method to calculate the amount of time until another temporal in terms of the specified unit:

@Test
public void givenTwoDateTimesInJava8_whenDifferentiatingInSecondsUsingUntil_thenWeGetTen() {
    LocalDateTime now = LocalDateTime.now();
    LocalDateTime tenSecondsLater = now.plusSeconds(10);

    long diff = now.until(tenSecondsLater, ChronoUnit.SECONDS);

    assertEquals(diff, 10);
}

Temporal#until иTemporalUnit#between  — это два разных API для одной и той же функциональности.

Подсчитывает количество дней, месяцев или лет между двумя датами.

Примеры использования

РАЗНДАТ(ДАТА(1969; 7; 16); ДАТА(1969; 7; 24); "D")

РАЗНДАТ(A1; A2; "YM")

РАЗНДАТ("7/16/1969"; "7/24/1969"; "Y")

Синтаксис

РАЗНДАТ(дата_начала, дата_окончания, единица_измерения)

  • дата_начала – начальная дата для расчета. Она может быть представлена числом, адресом ячейки, содержащей дату, или функцией, возвращающей дату.

  • дата_окончания – конечная дата для расчета. Она может быть представлена числом, адресом ячейки, содержащей дату, или функцией, возвращающей дату.

  • единица_измерения – аббревиатура единицы времени. Например, "M" означает «месяц». Возможные значения: "Y", "M", "D", "MD", "YM", "YD".

    • "Y": вычисляется количество полных лет между датой_начала и датой_окончания.

    • "M": вычисляется количество полных месяцев между датой_начала и датой_окончания.

    • "D": вычисляется количество дней между датой_начала и датой_окончания.

    • "MD": вычисляется количество дней между датой_начала и датой_окончания после вычитания полных месяцев.

    • "YM": вычисляется количество полных месяцев между датой_начала и датой_окончания после вычитания полных лет.

    • "YD": вычисляется количество дней между датой_начала и датой_окончания при условии, что разница между этими датами не более одного года.

Примечания

  • Месяц или год окончания учитывается только в том случае, если указанное число в нем не меньше, чем в начальном. Например, для диапазона 30.09.2015–28.02.2016 функция вернет значение «4 месяца», несмотря на то что 28 февраля – последний день месяца.

  • Если функция РАЗНДАТ возвращает результат в странном формате, значит этот формат применен к ячейке. Например, если РАЗНДАТ(ДАТА(1969; 7; 16); ДАТА(1969; 7; 24); "D") возвращает 07.01.1900, значит формат ячейки – Дата. Чтобы появился нужный результат 8, измените формат ячейки на Число.

  • Используйте аргумент "MD", чтобы ответить на такие вопросы как: «Если из моего возраста вычесть количество полных лет и месяцев, сколько останется дней?»

  • Используйте аргумент "YM", чтобы ответить на такие вопросы как: «Если из моего возраста вычесть количество полных лет, сколько останется месяцев?»

  • Используйте аргумент "YD", чтобы ответить на такие вопросы как: «Сколько дней прошло с моего последнего дня рождения?»

Похожие функции

ДАТА: Преобразует год, месяц и день в значение даты.

ДАТАЗНАЧ: Преобразует строку в значение даты.

Примеры

В этом примере функция РАЗНДАТ вычисляет длительность миссии «Аполлон-11» в днях.

В этом примере функция РАЗНДАТ вычисляет количество месяцев в году.

Понравилась статья? Поделить с друзьями:
  • Партийно государственное руководство номенклатура
  • В чем заключается специфические особенности народно освободительной войны под руководством кенесары
  • Таблетки урорек инструкция по применению взрослым от чего помогает
  • Kia ceed 2011 инструкция по эксплуатации
  • Freecad инструкция на русском скачать бесплатно