...

Получить количество дней в месяце

Тема в разделе "Скрипты и разработка", создана пользователем evgeneva, 7 окт 2021.

  1. evgeneva

    evgeneva Участник

    Необходимость узнать количество дней в месяце зачастую возникает, когда нужно обобщить данные за определенный период (месяц) и, соответственно, вычислить дату конца периода, чтобы в дальнейшем использовать её для поиска/фильтрации данных. Стандартные методы работы с датой и временем в 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();
    Далее можно работать с полученным списком заказов так, как необходимо.