# daystart — функция скриптa и диаграммы

Эта функция возвращает значение, соответствующее метке времени, включающей первую миллисекунду дня, содержащуюся в аргументе time. По умолчанию для вывода используется формат TimestampFormat, установленный в скрипте.

Синтаксис:

DayStart(time[, [period\_no[, day\_start]])

Возвращаемые типы данных: двойное значение

Аргументы

| Аргумент | Описание |
| --- | --- |
| time | Метка времени для вычисления. |
| period\_no | period\_no является целым числом или выражением, определяемым по целому числу, где значение 0 означает день, содержащий значение, указанное в полеtime. Отрицательные значения, заданные в поле period\_no, означают предшествующие дни, положительные — последующие. |
| day\_start | Чтобы указать, что дни начинаются не в полночь, укажите смещение в виде десятичного значения в параметре day\_start. Например, 0,125 обозначает 3:00.<br><br>Другими словами, чтобы создать смещение, разделите время начала на 24 часа. Например, чтобы день начинался в 7:00, используйте дробь 7/24. |

## Когда это следует использовать

Функция `daystart()` широко используется в составе выражения, когда пользователю требуется учитывать в расчетах часть дня, которая уже прошла. Например, с ее помощью можно вычислить совокупную заработную плату, заработанную сотрудниками за этот день по состоянию на текущий момент.

В этих примерах используется формат метки времени `'M/D/YYYY h:mm:ss[.fff] TT'`. Формат метки времени указан в операторе `SET TimeStamp` в верхней части скрипта загрузки данных. Измените формат в примерах согласно своим пожеланиям.

Примеры функции

| Пример | Результат |
| --- | --- |
| `daystart('01/25/2013 4:45:00 PM')` | Возвращает 1/25/2013 12:00:00 AM. |
| `daystart('1/25/2013 4:45:00 PM', -1)` | Возвращает 1/24/2013 12:00:00 AM. |
| `daystart('1/25/2013 16:45:00',0,0.5<br>)` | Возвращает 1/25/2013 12:00:00 PM. |

## Региональные настройки

Если не указано иное, в примерах, приведенных в данном разделе, используется следующий формат даты: ММ/ДД/ГГГГ. Формат даты указан в операторе `SET DateFormat` скрипта загрузки данных. В вашей системе может быть установлен другой формат даты по умолчанию в зависимости от региональных настроек и других факторов. Можно изменить формат в примерах в соответствии с потребностями. Или можно изменить форматы в скрипте загрузки в соответствии с этими примерами.

Региональные настройки по умолчанию в приложениях основаны на системных региональных настройках компьютера или сервера, где установлено ПО Qlik Sense. Если на сервере Qlik Sense, к которому обращается пользователь, выбран шведский язык, то редактор загрузки данных будет использовать шведские региональные настройки для даты, времени и валюты. Эти параметры регионального формата не связаны с языком, отображаемым в интерфейсе пользователя Qlik Sense. Qlik Sense будет отображаться на языке, который используется в браузере.

## Пример 1. Простой пример

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/daystart.htm)

#### Скрипт загрузки и результаты

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Простой набор данных, содержащий список дат, который загружается в таблицу под именем `Calendar`.

* Используется системная переменная `TimeStampFormat` со значением по умолчанию `(M/D/YYYY h:mm:ss[.fff] TT`.

* Предшествующая загрузка, создающая дополнительное поле под именем `SOD_timestamp` с использованием функции `daystart()`.

Помимо даты, в функцию не передаются дополнительные параметры.

Скрипт загрузки

```
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';

Calendar:
    Load
        date,
        daystart(date) as SOD_timestamp
        ;
Load
date
Inline 
[
date
03/11/2022 1:47:15 AM
03/12/2022 4:34:58 AM
03/13/2022 5:15:55 AM
03/14/2022 9:25:14 AM
03/15/2022 10:06:54 AM
03/16/2022 10:44:42 AM
03/17/2022 11:33:30 AM
03/18/2022 12:58:14 PM
03/19/2022 4:23:12 PM
03/20/2022 6:42:15 PM
03/21/2022 7:41:16 PM
];
					
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `date`

* `SOD_timestamp`

Результирующая таблица

| date | SOD\_timestamp |
| --- | --- |
| 03/11/2022 1:47:15 AM | 3/11/2022 12:00:00 AM |
| 03/12/2022 4:34:58 AM | 12.03.2022 00:00:00 |
| 03/13/2022 5:15:55 AM | 13.03.2022 00:00:00 |
| 03/14/2022 9:25:14 AM | 3/14/2022 12:00:00 AM |
| 03/15/2022 10:06:54 AM | 15.03.2022 00:00:00 |
| 03/16/2022 10:44:42 AM | 16.03.2022 00:00:00 |
| 03/17/2022 11:33:30 AM | 3/17/2022 12:00:00 AM |
| 03/18/2022 12:58:14 PM | 3/18/2022 12:00:00 AM |
| 03/19/2022 4:23:12 PM | 19.03.2022 00:00:00 |
| 03/20/2022 6:42:15 PM | 20.03.2022 00:00:00 |
| 03/21/2022 7:41:16 PM | 3/21/2022 12:00:00 AM |

Как показано в приведенной выше таблице, отметка времени окончания дня генерируется для каждой даты в наборе данных. Для отметки времени используется формат системной переменной `TimestampFormat M/D/YYYY h:mm:ss[.fff] TT`.

## Пример 2. Аргумент period\_no

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/daystart.htm)

#### Скрипт загрузки и результаты

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

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

  * `id`

  * `due_date`

  * `number_plate`

  * `amount`

* Предшествующая загрузка с использованием функции `daystart()`, которая предоставляет все три параметра: `time`, `period_no` и `day_start`. Эта предшествующая загрузка создает следующие два новых поля даты:

  * Поле даты `early_repayment_period` за семь дней до срока оплаты.

  * Поле даты `late_penalty_period` через 14 дней после срока оплаты.

Скрипт загрузки

```
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';

Fines:
    Load
        *,
        daystart(due_date,-7) as early_repayment_period,
        daystart(due_date,14) as late_penalty_period
        ;
Load
*
Inline
[
id, due_date, number_plate,amount
1,02/11/2022, 573RJG,50.00
2,03/25/2022, SC41854,50.00
3,04/14/2022, 8EHZ378,50.00
4,06/28/2022, 8HSS198,50.00
5,08/15/2022, 1221665,50.00
6,11/16/2022, EAK473,50.00
7,01/17/2023, KD6822,50.00
8,03/22/2023, 1GGLB,50.00
];
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `due_date`

* `early_repayment_period`

* `late_penalty_period`

Результирующая таблица

| due\_date | early\_repayment\_period | late\_penalty\_period |
| --- | --- | --- |
| 02/11/2022 9:25:14 AM | 2/4/2022 12:00:00 AM | 2/25/2022 12:00:00 AM |
| 03/25/2022 10:06:54 AM | 3/18/2022 12:00:00 AM | 4/8/2022 12:00:00 AM |
| 04/14/2022 10:44:42 AM | 4/7/2022 12:00:00 AM | 4/28/2022 12:00:00 AM |
| 06/28/2022 11:33:30 AM | 21.06.2022 00:00:00 | 7/12/2022 12:00:00 AM |
| 08/15/2022 12:58:14 PM | 8/8/2022 12:00:00 AM | 8/29/2022 12:00:00 AM |
| 11/16/2022 4:23:12 PM | 11/9/2022 12:00:00 AM | 11/30/2022 12:00:00 AM |
| 01/17/2023 6:42:15 PM | 1/10/2023 12:00:00 AM | 1/31/2023 12:00:00 AM |
| 03/22/2023 7:41:16 PM | 3/15/2023 12:00:00 AM | 4/5/2023 12:00:00 AM |

Значения новых полей находятся в `TimestampFormat M/DD/YYYY tt`. Так как была использована функция `daystart()`, все значения меток времени представляют первую миллисекунду дня.

Значения досрочного платежа на семь дней предшествуют сроку платежа, переданному во втором аргументе в функции `  daystart() `, и являются отрицательными.

Значения просроченного платежа следуют через 14 дней после срока платежа, переданного во втором аргументе в функции `daystart()`, и являются положительными.

## Пример 3. Скрипт day\_start

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/daystart.htm)

#### Скрипт загрузки и результаты

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

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

* Используется та же предшествующая загрузка, что в предыдущем примере.

В этом примере начало и окончание рабочего дня устанавливается на 7:00 утра (7:00 AM) каждый день.

Скрипт загрузки

```
SET DateFormat='MM/DD/YYYY';

Fines:
    Load
        *,
        daystart(due_date,-7,7/24) as early_repayment_period,	 
        daystart(due_date,14, 7/24) as late_penalty_period
        ;
Load
*
Inline
[
id, due_date, number_plate,amount
1,02/11/2022, 573RJG,50.00
2,03/25/2022, SC41854,50.00
3,04/14/2022, 8EHZ378,50.00
4,06/28/2022, 8HSS198,50.00
5,08/15/2022, 1221665,50.00
6,11/16/2022, EAK473,50.00
7,01/17/2023, KD6822,50.00
8,03/22/2023, 1GGLB,50.00
];
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `due_date`

* `early_repayment_period`

* `late_penalty_period`

Результирующая таблица

| due\_date | early\_repayment\_period | late\_penalty\_period |
| --- | --- | --- |
| 02/11/2022 | 2/3/2022 7:00:00 AM | 2/24/2022 7:00:00 AM |
| 03/25/2022 | 3/17/2022 7:00:00 AM | 4/7/2022 7:00:00 AM |
| 04/14/2022 | 4/6/2022 7:00:00 AM | 4/27/2022 7:00:00 AM |
| 06/28/2022 | 6/20/2022 7:00:00 AM | 7/11/2022 7:00:00 AM |
| 08/15/2022 | 8/7/2022 7:00:00 AM | 8/28/2022 7:00:00 AM |
| 11/16/2022 | 11/8/2022 7:00:00 AM | 11/29/2022 7:00:00 AM |
| 01/17/2023 | 1/9/2023 7:00:00 AM | 1/30/2023 7:00:00 AM |
| 03/22/2023 | 3/14/2023 7:00:00 AM | 4/4/2023 7:00:00 AM |

Теперь в качестве метки времени дат указано 7:00 AM, так как аргумент `day_start`, переданный в функции `daystart()`, имеет значение 7/24. В результате этого начало рабочего дня устанавливается на 7:00 утра.

Так как поле `due_date` не имеет метки времени, для него используется значение 12:00 AM (полночь), то есть оно относится к предыдущему дню, так как рабочий день начинается и заканчивается в 7:00 утра. Поэтому период досрочного погашения штрафа со сроком оплаты 11 февраля начинается 3 февраля в 7:00 утра.

## Пример 4. Пример объекта диаграммы

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/daystart.htm)

#### Скрипт загрузки и выражение диаграммы

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.

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

Однако в приложение загружается только оригинальная таблица Fines с двумя дополнительными значениями сроков, вычисляемыми в объекте диаграммы.

Скрипт загрузки

```
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';

Fines:
    Load
*
Inline 
[
id, due_date, numer_plate,amount
1,02/11/2022 9:25:14 AM, 573RJG,50.00
2,03/25/2022 10:06:54 AM, SC41854,50.00
3,04/14/2022 10:44:42 AM, 8EHZ378,50.00
4,06/28/2022 11:33:30 AM, 8HSS198,50.00
5,08/15/2022 12:58:14 PM, 1221665,50.00
6,11/16/2022 4:23:12 PM, EAK473,50.00
7,01/17/2023 6:42:15 PM, KD6822,50.00
8,03/22/2023 7:41:16 PM, 1GGLB,50.00
];
```

Результаты

Выполните следующие действия.

1. Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение: due\_date.

2. Чтобы создать поле early\_repayment\_period, создайте следующую меру:

   =daystart(due\_date,-7,7/24)

3. Чтобы создать поле late\_penalty\_period, создайте следующую меру:

   =daystart(due\_date,14,7/24)

Результирующая таблица

| due\_date | =daystart(due\_date,-7,7/24) | =daystart(due\_date,14,7/24) |
| --- | --- | --- |
| 02/11/2022 9:25:14 AM | 2/4/2022 7:00:00 AM | 2/25/2022 7:00:00 AM |
| 03/25/2022 10:06:54 AM | 3/18/2022 7:00:00 AM | 4/8/2022 7:00:00 AM |
| 04/14/2022 10:44:42 AM | 4/7/2022 7:00:00 AM | 4/28/2022 7:00:00 AM |
| 06/28/2022 11:33:30 AM | 6/21/2022 7:00:00 AM | 7/12/2022 7:00:00 AM |
| 08/15/2022 12:58:14 PM | 8/8/2022 7:00:00 AM | 8/29/2022 7:00:00 AM |
| 11/16/2022 4:23:12 PM | 11/9/2022 7:00:00 AM | 11/30/2022 7:00:00 AM |
| 01/17/2023 6:42:15 PM | 1/10/2023 7:00:00 AM | 1/31/2023 7:00:00 AM |
| 03/22/2023 7:41:16 PM | 3/15/2023 7:00:00 AM | 4/5/2023 7:00:00 AM |

Значения новых полей находятся в TimestampFormat M/D/YYYY h:mm:ss[.fff] TT. Так как была использована функция daystart(), значения меток времени соответствуют первой миллисекунде дня.

Значения досрочного платежа на семь дней предшествуют сроку платежа, так как второй аргумент, переданный в функции daystart(), имеет отрицательное значение.

Значения просроченного платежа наступают через 14 дней после срока платежа, так как второй аргумент, переданный в функции daystart(), имеет положительное значение.

В качестве отметки времени дат указано 7:00 утра (7:00 AM), так как третий аргумент daystart(), переданный в функции day\_start, имеет значение 7/24.