Я разведён и женат, сын живёт поочерёдно: неделя у меня, неделя у своей мамы. Казалось бы, график прост, но реальность вносит коррективы: врач в четверг, поездка к бабушке на выходных - забыть что-то означает испортить планы всем и получить претензии.
Моя схема:
✅ календарь с бывшей женой - только ключевое по сыну - переезды, врачи, собрания.
✅ календарь с моей женой: наша личная жизнь - свидания, поездки, дела. Без сына.
✅ семейный календарь (я + жена + сын): всё, что касается сына в мои недели.
Зачем так сложно? Границы. Приватность новой семьи, уважение к бывшей жене и прозрачность в делах сына.

Проблема: как не перегружать жену лишним
Когда сын у меня, хочется, чтобы всё важное сразу появлялось в семейном календаре - без ручной работы. Но когда он живёт у бывшей, жена не должна видеть в календаре чужие дела. Ей не нужно лишнее: “лоры”, “тренировки” и “встречи с бабушкой” в чужую неделю. Например, бывшая добавила “Приём у ортодонта” - хорошо бы, чтобы это появилось в семейном календаре только в нашу неделю. А в остальные - не мешало. Автоматическая фильтрация событий решает эту задачу: всё по делу, ничего лишнего.
Ручное управление тремя этими календарями неудобно. Я устал быть курьером между мирами новой семьи и бывшей жены. Автоматизация синхронизации календарей через Google Apps Script (GAS) стала спасением: события из календаря с бывшей автоматически попадают в семейный, но только если касаются сына в моё время.
Решение: Google Apps Script + логика по датам
Скрипт проверяет понедельник: если есть событие “Имя_ребёнка на Берёзовой аллее” - значит, неделя моя. Тогда он копирует все события на эту неделю в семейный календарь. Если такого события нет - значит, сын живёт у мамы, и ничего не копируется. Жена видит только то, что имеет к ней отношение.
Запуск настроен через триггеры Google Apps Script: каждое воскресенье вечером скрипт автоматически обрабатывает следующую неделю. Никаких ручных действий. Скрипт проверяет дубликаты, копирует только новые события с полным описанием и временем.
Если хотите сделать аналогичную систему, то:
Замените
CHILD_CALENDAR_ID
иFAMILY_CALENDAR_ID
на реальные ID ваших календарей (найти их можно черезgetCalendars()
).Настройте фразу-маркер в коде (вместо "
на Березовой аллее
").
Полный код скрипта:
// Получаем список идентификаторов всех доступных календарей
function getCalendars() {
var calendars = CalendarApp.getAllCalendars();
Logger.log('Этот пользователь подписан на %s календарей:', calendars.length);
for (var i = 0; i < calendars.length; i++) {
var calendar = calendars[i];
Logger.log((i + 1) + 'й календарь: "' + calendar.getName() + '",\n ID: "' + calendar.getId() + '"\n');
}
}
// Синхронизация из календаря сына в семейный
function syncChildEventsToFamily() {
const CHILD_CALENDAR_ID = 'example123@group.calendar.google.com';
const FAMILY_CALENDAR_ID = 'family456@group.calendar.google.com';
const today = new Date();
const nextMonday = new Date(today);
nextMonday.setDate(today.getDate() + ((1 - today.getDay() + 7) % 7));
nextMonday.setHours(0, 0, 0, 0);
const mondayEnd = new Date(nextMonday);
mondayEnd.setHours(23, 59, 59, 999);
const weekEnd = new Date(nextMonday);
weekEnd.setDate(weekEnd.getDate() + 6);
weekEnd.setHours(23, 59, 59, 999);
const childCalendar = CalendarApp.getCalendarById(CHILD_CALENDAR_ID);
const mondayEvents = childCalendar.getEvents(nextMonday, mondayEnd);
// Ищем события с определенным местоположением
const specialLocationEvents = mondayEvents.filter(event =>
event.getTitle().toLowerCase().includes("на березовой аллее")
);
if (specialLocationEvents.length === 0) {
Logger.log("Неделя не ваша. Событие с 'на Березовой аллее' не найдено.");
return;
}
const familyCalendar = CalendarApp.getCalendarById(FAMILY_CALENDAR_ID);
const existingFamilyEvents = familyCalendar.getEvents(nextMonday, weekEnd);
let copiedCount = 0;
// ? Функция для проверки дубликатов
function isDuplicate(event, existingEvents) {
return existingEvents.some(famEvent =>
famEvent.getTitle() === event.getTitle() &&
famEvent.getStartTime().getTime() === event.getStartTime().getTime()
);
}
// ✅ Копируем событие "на Березовой аллее"
specialLocationEvents.forEach(event => {
if (!isDuplicate(event, existingFamilyEvents)) {
familyCalendar.createEvent(
event.getTitle(),
event.getStartTime(),
event.getEndTime(),
{
description: event.getDescription(),
location: event.getLocation(),
guests: event.getGuestList().map(g => g.getEmail()).join(",")
}
);
Logger.log(`Добавлено событие (Березовая аллея): ${event.getTitle()} (${event.getStartTime()} — ${event.getEndTime()})`);
copiedCount++;
}
});
const weekEvents = childCalendar.getEvents(nextMonday, weekEnd);
// ? Копируем остальные события, кроме уже добавленных специальных
weekEvents.forEach(event => {
const isSpecialLocation = specialLocationEvents.some(specialEvent =>
specialEvent.getTitle() === event.getTitle() &&
specialEvent.getStartTime().getTime() === event.getStartTime().getTime()
);
if (isSpecialLocation) return; // ⚠️ Пропускаем — уже скопировано
if (!isDuplicate(event, existingFamilyEvents)) {
familyCalendar.createEvent(
event.getTitle(),
event.getStartTime(),
event.getEndTime(),
{
description: event.getDescription(),
location: event.getLocation(),
guests: event.getGuestList().map(g => g.getEmail()).join(",")
}
);
Logger.log(`Добавлено событие: ${event.getTitle()} (${event.getStartTime()} — ${event.getEndTime()})`);
copiedCount++;
}
});
Logger.log(`Всего добавлено событий: ${copiedCount}`);
}
Результат
Теперь всё работает как надо: жена видит только нужное и не раздражается из-за чужих дел в календаре. Бывшая не втягивается в жизнь нашей семьи. Никому не нужно синхронизировать события вручную. Спокойствие, порядок, и никакой лишней суеты.

Заключение
Развод - это не конец совместных дел, особенно если у вас есть ребёнок. Школа, кружки, врачи и поездки не исчезают. И чем меньше шума вокруг логистики, тем спокойнее живётся всем сторонам. Современные инструменты, такие как Google Apps Script, помогают навести порядок и снизить напряжение. Просто работает - и каждый занят своей жизнью.
А как вы организовали свою жизнь в новой семье или после развода? Используете какие-то технические моменты, облегчающие Вам жизнь?
Тема на Хабре не особо поднимается - статей таких не увидел...
Автор: Михаил Шардин
? Моя онлайн-визитка
? Telegram «Умный Дом Инвестора»
2 июля 2025 г.
RichardMerlock
Жизнь по расписанию - это дикость! Оплачиваемый труд по расписанию - ОК. Но еще три работы, а спокойно пожить-то когда? "Каждый занят своей жизнью" - вот и отлично, а совместные дела можно обсудить и без всяких планировщиков. Нафиг-нафиг-нафиг.
Kwisatz
Вы не правы, все наоборот. Календарь это способ снять нагрузку, вам не нужно помнить, нет лишних нервов, нет забывашек, неприятных моментов, вы все везде успеваете. Единственное что нужно - приучить себя заносить.
Я такие разговоры уже вел десятки раз с руководителями разных уровней на протяжении 20 лет. У них постоянный цейтнот, потери репутации, аврали изза забытых дел, но взять и записат в ежедневник на конкретный день - неее, что вы. Мне хватило раз 10 попасть жир ногами с делами которые были запланировали за долгое время (и не обсуждались до наступления даты), чтобы я сделал выводы. Потом правда еще настрадался с забытыми днями рождения, раз 100. Теперь все в гуглокалендарь.
empenoso Автор
Условно: есть плановая запись к врачу - её может создать один из родителей, но второй даже не узнает - а так календарь. Прозрачно