mergeCalendars

объединяет несколько рабочих календарей в один

void mergeCalendars(Calendar[] | Calendar calendars, [Calendar calendar2] );
calendarsCalendar[] | Calendarмассив объектов календарей или первый объект календаря
calendar2Calendarнеобязательный, второй объект календаря

Example

const johnCalendarId = gantt.addCalendar({
    worktime: {
        hours: ["0:00-24:00"],
        days: [0, 1, 1, 1, 1, 1, 0]
    }
});
const mikeCalendarId = gantt.addCalendar({
    worktime: {
        hours: ["8:00-12:00", "13:00-17:00"],
        days: [0, 1, 1, 1, 1, 1, 0]
    }
});
 
// передаем массив календарей в качестве аргумента
const joinedCalendar = gantt.mergeCalendars([
    gantt.getCalendar(mikeCalendarId),
    gantt.getCalendar(johnCalendarId)
]);

Details

Вы также можете указать набор объектов календарей в качестве параметров метода mergeCalendars:

// передаем календари в качестве аргументов
const joinedCalendar = gantt.mergeCalendars(
    gantt.getCalendar(mikeCalendarId),
    gantt.getCalendar(johnCalendarId)
);

Логика объединения календарей

При объединении календарей применяется следующая логика - день недели в новом календаре будет считаться рабочим днем (1/true) только если он является рабочим днем во всех объединенных календарях (логическое И (&&)):

// календарь 1 + календарь 2 = объединенный календарь;
 
// Случай 1: 
// рабочий день (1/true) + рабочий день (1/true) = рабочий день (1/true);
 
// Случай 2: 
// рабочий день (1/true) + нерабочий день (0/false) = нерабочий день (0/false);
 
// Случай 3: 
// нерабочий день (0/false) + нерабочий день (0/false) = нерабочий день (0/false);

Итак, если у нас есть два календаря:

  • первый с рабочими днями: понедельник и среда:
const calendar1Id = gantt.addCalendar({
    id: "calendar1",
    worktime: {
        days: [ 0, 1, 0, 1, 0, 0, 0 ]
    }
});
  • второй с рабочими днями: понедельник, вторник и четверг:
const calendar2Id = gantt.addCalendar({
    id: "calendar2",
    worktime: {
        days: [ 0, 1, 1, 0, 1, 0, 0 ]
    }
});

Когда календари объединяются:

const joinedCalendar = gantt.mergeCalendars([
    gantt.getCalendar(calendar1Id),
    gantt.getCalendar(calendar2Id)
]);

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

// дни: [ 0, 1, 0, 1, 0, 0, 0 ]
 
// +
 
// дни: [ 0, 1, 1, 0, 1, 0, 0 ]
 
// =
 
// дни: [ 0, 1, 0, 0, 0, 0, 0 ]

Связанный пример: Gantt. Объединение рабочих календарей (через метод mergeCalendars())

Логика не учитывает customWeeks.

See also
Change log

добавлено в v7.0

К началу