Михаил Шардин
Михаил Шардин личный блог
02 июля 2025, 08:15

Жену не бесит, бывшая не звонит: как я автоматизировал родительство после развода

Понимаю, что Смартлаб — в первую очередь про инвестиции, трейдинг и экономику. Но раз за разом здесь появляются темы, которые выходят за рамки биржи, особенно когда речь идёт об автоматизации, продуктивности, жизни после кризисов — в том числе личных.

Я разведён и женат, сын живёт поочерёдно: неделя у меня, неделя у своей мамы. Казалось бы, график прост, но реальность вносит коррективы: врач в четверг, поездка к бабушке на выходных — забыть что-то означает испортить планы всем и получить претензии.

Моя схема:

✅ календарь с бывшей женой — только ключевое по сыну — переезды, врачи, собрания.
✅ календарь с моей женой: наша личная жизнь — свидания, поездки, дела. Без сына.
✅ семейный календарь (я + жена + сын): всё, что касается сына в мои недели.

Зачем так сложно? Границы. Приватность новой семьи, уважение к бывшей жене и прозрачность в делах сына.

Жену не бесит, бывшая не звонит: как я автоматизировал родительство после развода

Проблема: как не перегружать жену лишним
Когда сын у меня, хочется, чтобы всё важное сразу появлялось в семейном календаре — без ручной работы. Но когда он живёт у бывшей, жена не должна видеть в календаре чужие дела. Ей не нужно лишнее: “лоры”, “тренировки” и “встречи с бабушкой” в чужую неделю. Например, бывшая добавила “Приём у ортодонта” — хорошо бы, чтобы это появилось в семейном календаре только в нашу неделю. А в остальные — не мешало. Автоматическая фильтрация событий решает эту задачу: всё по делу, ничего лишнего.

Ручное управление тремя этими календарями неудобно. Я устал быть курьером между мирами новой семьи и бывшей жены. Автоматизация синхронизации календарей через Google Apps Script (GAS) стала спасением: события из календаря с бывшей автоматически попадают в семейный, но только если касаются сына в моё время.

Решение: Google Apps Script + логика по датам

Скрипт проверяет понедельник: если есть событие “Имя_ребёнка на Берёзовой аллее” — значит, неделя моя. Тогда он копирует все события на эту неделю в семейный календарь. Если такого события нет — значит, сын живёт у мамы, и ничего не копируется. Жена видит только то, что имеет к ней отношение.

Запуск настроен через триггеры Google Apps Script: каждое воскресенье вечером скрипт автоматически обрабатывает следующую неделю. Никаких ручных действий. Скрипт проверяет дубликаты, копирует только новые события с полным описанием и временем.

Если хотите сделать аналогичную систему, то:

  1. Замените CHILD_CALENDAR_ID и FAMILY_CALENDAR_ID на реальные ID ваших календарей (найти их можно через getCalendars()).

  2. Настройте фразу-маркер в коде (вместо "на Березовой аллее").

Полный код скрипта:

 

// Получаем список идентификаторов всех доступных календарей
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 г.

105 Комментариев
  • Клетчатый
    02 июля 2025, 08:26
    мда, сначала создадут себе геморрой, потом гугл таблицы в помощь. Пишешь, что каждый занят своей жизнью, а у самого, как минимум трое на контроле.
  • Crogall
    02 июля 2025, 08:29
    Да что же это за пц такой. Снова мексиканские страсти устроили. Решайте вы свои животные позывы где-то за амбаром. Вначале наделают себе проблем, потом пытаются скрипты для календарей писать. Полный пц. Сойдись уже обратно со своей женой, и закончится этот сериал тут. Коли тебя тянет как собаку на миску.
  • T-800
    02 июля 2025, 08:35
    Крутяк! Первый раз такое вижу)
  • Jkrsss
    02 июля 2025, 08:41
    Развод это прекращение брака (семейный кодекс). Жена получила:
    1) Была замужен +, статус был ничего не дал.
    2) Понимание. Мужик не нужен, самой спокойно можно прожить.
    3) Ребенок пассивный доход для жены.

    Мужик:
    1) Продление генетической линии, спермобак...
    2) Лося... 

    @выйти замуж — не напасть, главное, замужем не пропасть.
    Пока смерть не разлучит нас… (Всё придумано до нас:) )

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн