Необходимость узнать количество дней в месяце зачастую возникает, когда нужно обобщить данные за определенный период (месяц) и, соответственно, вычислить дату конца периода, чтобы в дальнейшем использовать её для поиска/фильтрации данных. Стандартные методы работы с датой и временем в ELMA365 не позволяют этого сделать. Для решения этой задачи рекомендуется использовать дополнительный метод.
Вариант 1. Вычисление исходя из определенной даты
Код:
function daysInMonth(date: TDate): number {
return32 - new TDate(date.year, date.month, 32).day;
}
Вариант 2. Вычисление исходя из заданных месяца и года
Код:
function daysInMonth(month: number, year: number): number {
return 32 - new TDate(year, month, 32).day;
}
Рассмотрим применение метода. Например, в процессе, автоматически запускаемом в первый рабочий день каждого месяца, необходимо собрать данные о заказах, оплаченных в прошедшем месяце, для формирования сводного отчета.
Код:
//получаем текущую дату
const today = new TDate();
//получаем даты начала и конца прошлого месяца
let month: number;
let year: number;
if (today.month == 1){
year = today.year-1;
month = 12;
} else {
year = today.year;
month = today.month-1;
}
Context.data.start = new TDate(year, month, 1);
Context.data.end = new TDate(year, month, daysInMonth(month, year));
//получаем все заказы, дата оплаты которых в пределах нужного периода (при этом исключаем удаленные заказы)
Context.data.orders = await Application.search()
.where((order, g)=>g.and(order.payment_date.gte(Context.data.start!), order.payment_date.lte(Context.data.end!), order.__deletedAt.eq(null)))
.size(10000)
.all();
Далее можно работать с полученным списком заказов так, как необходимо.