Иногда я живу один и ставлю с вечера кашу в мультиварке, чтобы она приготовилась к времени моего завтрака.
И раньше я постоянно путался - какую отсрочку старта поставить вечером, чтобы каша была готова к определенному времени утром?
В итоге составил табличку с формулами и написал код Google Apps Script, чтобы знать какое точное время отсрочки старта готовки задавать на старой мультиварке.
Проблема выбора времени для приготовления каши
Время завтрака очень важно и я никогда его не пропускаю. Обычно завтракаю довольно рано. Проблема расчёта времени действительно актуальна для меня. Пытался считать отсрочку старта приготовления каши на завтра на калькуляторе - как-то странно и долго.
Структурированный подход - таблица
Подумал, что для решения этой задачи можно использовать Google Таблицы и создать формулу, которая будет рассчитывать время отсрочки старта мультиварки в зависимости от времени, когда нужна готовая каша.
В первой колонке через формулу задаю текущее время:
=TIME(HOUR(NOW()); MINUTE(NOW()); SECOND(NOW()))
Во второй указываю время, когда каша уже должна быть готова, например, 06:00.
В третьей колонке пишу продолжительность приготовления каши в часах, например для гречки 00:40.
В последней колонке составил простую формулу, которая будет вычислять время отсрочки старта мультиварки.
Таблица тут: в ней две вкладки - вычисление на формулах и через скрипты. Часовой пояс таблицы Пермь, а это значит Москва +2 часа - это можно изменить в Вашей копии через меню Файл > Настройки таблицы.
Автоматизация процесса с помощью скрипта Google Apps
Функция CALCULATE_DELAY
вычисляет необходимую задержку запуска мультиварки, чтобы каша была готова в указанное время. Требуется всего два параметра: желаемое время завершения и время приготовления. Распишу что делает код:
Проверяю то, что ввод рассматривается как строка:
desiredCompletionTime = desiredCompletionTime.toString();
cookingTime = cookingTime.toString();
Функция начинается с преобразования входных параметров в строки, чтобы гарантировать их правильную дальнейшую обработку.
Получение текущего времени
var currentDateTime = new Date();
var currentHours = currentDateTime.getHours();
var currentMinutes = currentDateTime.getMinutes();
Текущая дата и время извлекаются с помощью функции «new Date()
». Это дает функции базовую линию для расчета задержки.
Парсим желаемое время завершения
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
»).
При необходимости корректируем дату на завтра
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);
Время задержки форматируется в формате «ЧЧ:ММ» и регистрируется в целях отладки.
Тестирую функцию CALCULATE_DELAY
:
function test() {
CALCULATE_DELAY("05:20:00", "00:40:00")
}
В этом тестовом примере рассчитывается время задержки начала для каши, которая должна быть готова к 05:20 утра, а приготовление занимает 40 минут.
Таблица тут: в ней две вкладки - вычисление на формулах и через скрипты.
Полностью весь код выглядит следующим образом:
/**
* Расчет времени отсрочки старта для мультиварки
*
* https://habr.com/ru/articles/833648/
* Михаил Шардин, https://shardin.name/
*
*/
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 г.
[а ещё можно написать телеграм боту и из первых рук узнавать о выходе моих статей]