Вычисление отсрочки старта приготовления каши на завтра

от автора

Иногда я живу один и ставлю с вечера кашу в мультиварке, чтобы она приготовилась к времени моего завтрака. 

И раньше я постоянно путался — какую отсрочку старта поставить вечером, чтобы каша была готова к определенному времени утром? 

В итоге составил табличку с формулами и написал код Google Apps Script, чтобы знать какое точное время отсрочки старта готовки задавать на старой мультиварке.

Проблема выбора времени для приготовления каши

Время завтрака очень важно и я никогда его не пропускаю. Обычно завтракаю довольно рано. Проблема расчёта времени действительно актуальна для меня. Пытался считать отсрочку старта приготовления каши на завтра на калькуляторе — как-то странно и долго.

Старая мультиварка

Старая мультиварка

Структурированный подход — таблица

Подумал, что для решения этой задачи можно использовать Google Таблицы и создать формулу, которая будет рассчитывать время отсрочки старта мультиварки в зависимости от времени, когда нужна готовая каша.

В первой колонке через формулу задаю текущее время:

=TIME(HOUR(NOW()); MINUTE(NOW()); SECOND(NOW()))

Во второй указываю время, когда каша уже должна быть готова, например, 06:00.

В третьей колонке пишу продолжительность приготовления каши в часах, например для гречки 00:40.

В последней колонке составил простую формулу, которая будет вычислять время отсрочки старта мультиварки.

Таблица тут: в ней две вкладки — вычисление на формулах и через скрипты. Часовой пояс таблицы Пермь, а это значит Москва +2 часа — это можно изменить в Вашей копии через меню Файл > Настройки таблицы.

Таблица "Отсрочка старта приготовления каши на завтра"

Таблица «Отсрочка старта приготовления каши на завтра»

Автоматизация процесса с помощью скрипта Google Apps

Функция CALCULATE_DELAY вычисляет необходимую задержку запуска мультиварки, чтобы каша была готова в указанное время. Требуется всего два параметра: желаемое время завершения и время приготовления. Распишу что делает код:

  1. Проверяю то, что ввод рассматривается как строка:

desiredCompletionTime = desiredCompletionTime.toString(); cookingTime = cookingTime.toString(); 

Функция начинается с преобразования входных параметров в строки, чтобы гарантировать их правильную дальнейшую обработку.

  1. Получение текущего времени

var currentDateTime = new Date(); var currentHours = currentDateTime.getHours(); var currentMinutes = currentDateTime.getMinutes(); 

Текущая дата и время извлекаются с помощью функции «new Date()». Это дает функции базовую линию для расчета задержки.

  1. Парсим желаемое время завершения

var desiredParts = desiredCompletionTime.split(':'); var desiredDateTime = new Date(currentDateTime); desiredDateTime.setHours(parseInt(desiredParts[0], 10)); desiredDateTime.setMinutes(parseInt(desiredParts[1], 10)); desiredDateTime.setSeconds(0);

Желаемое время завершения разбито на часы и минуты. Эти значения затем используются для установки желаемого времени завершения для нового объекта даты («desiredDateTime»).

  1. При необходимости корректируем дату на завтра

if (desiredDateTime <= currentDateTime) {   desiredDateTime.setDate(desiredDateTime.getDate() + 1); }

Если желаемое время завершения раньше текущего времени, функция предполагает, что время завершения приходится на следующий день, и соответствующим образом корректирует дату.

  1. Парсим время приготовления

var cookingParts = cookingTime.split(':'); var cookingTimeMinutes = parseInt(cookingParts[0], 10) * 60 + parseInt(cookingParts[1], 10);

Время приготовления разбивается на часы и минуты, а затем преобразуется в общее количество минут для облегчения расчета.

  1. Рассчитываем время начала приготовления

var startCookingTime = new Date(desiredDateTime.getTime() - cookingTimeMinutes * 60000); 

Функция рассчитывает точное время запуска мультиварки путем вычитания времени приготовления (в миллисекундах) из желаемого времени завершения.

  1. Рассчитываем необходимую задержку исходя из текущего времени в минутах

var delayMinutes = (startCookingTime - currentDateTime) / 60000; 

Время задержки в минутах рассчитывается путем нахождения разницы между временем начала приготовления и текущим временем с последующим преобразованием этой разницы из миллисекунд в минуты.

  1. Преобразуем время отсрочки в часы и минуты

var delayHours = Math.floor(delayMinutes / 60); var delayRemainingMinutes = Math.round(delayMinutes % 60); 

Затем время задержки преобразуется в часы и минуты для облегчения интерпретации и настройки на мультиварке.

  1. Форматируем задержку как ЧЧ:ММ

Logger.log(`Результат:\n${('0' + delayHours).slice(-2) + ':' + ('0' + delayRemainingMinutes).slice(-2)}`) return ('0' + delayHours).slice(-2) + ':' + ('0' + delayRemainingMinutes).slice(-2); 

Время задержки форматируется в формате «ЧЧ:ММ» и регистрируется в целях отладки.

Тестирую функцию CALCULATE_DELAY:

function test() {   CALCULATE_DELAY("05:20:00", "00:40:00") } 

В этом тестовом примере рассчитывается время задержки начала для каши, которая должна быть готова к 05:20 утра, а приготовление занимает 40 минут.

Таблица тут: в ней две вкладки — вычисление на формулах и через скрипты.

Скриншот сделан утром

Скриншот сделан утром

Полностью весь код выглядит следующим образом:

/**  * Расчет времени отсрочки старта для мультиварки  *   * https://habr.com/ru/articles/833648/  */  function CALCULATE_DELAY(desiredCompletionTime, cookingTime) {   desiredCompletionTime = desiredCompletionTime.toString();   cookingTime = cookingTime.toString();   var currentDateTime = new Date();   var currentHours = currentDateTime.getHours();   var currentMinutes = currentDateTime.getMinutes();   var desiredParts = desiredCompletionTime.split(':');   var desiredDateTime = new Date(currentDateTime);   desiredDateTime.setHours(parseInt(desiredParts[0], 10));   desiredDateTime.setMinutes(parseInt(desiredParts[1], 10));   desiredDateTime.setSeconds(0);   if (desiredDateTime <= currentDateTime) {     desiredDateTime.setDate(desiredDateTime.getDate() + 1);   }   var cookingParts = cookingTime.split(':');   var cookingTimeMinutes = parseInt(cookingParts[0], 10) * 60 + parseInt(cookingParts[1], 10);   var startCookingTime = new Date(desiredDateTime.getTime() - cookingTimeMinutes * 60000);   var delayMinutes = (startCookingTime - currentDateTime) / 60000;   var delayHours = Math.floor(delayMinutes / 60);   var delayRemainingMinutes = Math.round(delayMinutes % 60);   Logger.log(`Результат:\n${('0' + delayHours).slice(-2) + ':' + ('0' + delayRemainingMinutes).slice(-2)}`)   return ('0' + delayHours).slice(-2) + ':' + ('0' + delayRemainingMinutes).slice(-2); }  function test() {   CALCULATE_DELAY("05:20:00", "00:40:00") }

Итоги

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

Автор: Михаил Шардин

5 августа 2024 г.


ссылка на оригинал статьи https://habr.com/ru/articles/833648/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *