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

В этой статье мы подробно разберём, как создать калькулятор для расчёта времени работы в WordPress. Такой калькулятор полезен, если вы ведёте проектную деятельность, фриланс, или хотите автоматически рассчитывать оплачиваемое время в зависимости от заданных параметров. Примером может служить расчёт стоимости услуг на основе количества часов, дней или смен, с учётом перерывов и выходных.

Почему нужен калькулятор времени работы в WordPress

Часто владельцы сайтов и фрилансеры сталкиваются с необходимостью быстро оценивать время, затрачиваемое на выполнение задач. Ручные подсчёты занимают много времени и подвержены ошибкам. Автоматизация расчёта времени работы в WordPress позволяет:

  • Ускорить процесс оценки и формирования смет;
  • Снизить количество ошибок в расчетах;
  • Улучшить взаимодействие с клиентами, предоставляя им мгновенную обратную связь;
  • Интегрировать расчёты с другими сервисами или плагинами, например, для выставления счетов.

Основные задачи калькулятора времени работы

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

  • Начало и конец работы (дата и время);
  • Учёт перерывов (обед, отдых);
  • Учитывать выходные и праздники, если работа не ведётся в эти дни;
  • Возможность ввести фиксированную стоимость часа или дня;
  • Выдавать итоговое время и итоговую стоимость услуги.

Пример плагинов для реализации задачи

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

  • My Popup — для отображения калькулятора в модальном окне;
  • WPRemark — для интеграции отзывов и комментариев по проектам, что помогает отслеживать время;
  • ABC Pagination — для удобного деления длинных форм на шаги.

Создание простого калькулятора расчёта времени в WordPress на PHP и JavaScript

Начнём с базового примера, реализующего ввод времени начала и конца, расчёт разницы и вывод результата с учётом перерыва.

HTML форма калькулятора

Добавьте на страницу следующий код формы:

<form id="wpcalc_time_form">
  <label for="start_time">Время начала работы:</label>
  <input type="datetime-local" id="start_time" name="start_time" required><br>

  <label for="end_time">Время окончания работы:</label>
  <input type="datetime-local" id="end_time" name="end_time" required><br>

  <label for="break_minutes">Перерыв (минуты):</label>
  <input type="number" id="break_minutes" name="break_minutes" value="0" min="0"><br>

  <label for="hourly_rate">Стоимость часа (₽):</label>
  <input type="number" id="hourly_rate" name="hourly_rate" value="1000" min="0" step="0.01"><br>

  <button type="button" onclick="wpcalcCalculateTime()">Рассчитать</button>
</form>

<div id="wpcalc_result" style="margin-top:20px;font-weight:bold;"></div>

JavaScript для расчёта времени и стоимости

function wpcalcCalculateTime() {
  const startInput = document.getElementById('start_time').value;
  const endInput = document.getElementById('end_time').value;
  const breakMinutes = parseInt(document.getElementById('break_minutes').value) || 0;
  const hourlyRate = parseFloat(document.getElementById('hourly_rate').value) || 0;

  if (!startInput || !endInput) {
    alert('Пожалуйста, заполните время начала и окончания работы.');
    return;
  }

  const startDate = new Date(startInput);
  const endDate = new Date(endInput);

  if (endDate <= startDate) {
    alert('Время окончания должно быть больше времени начала.');
    return;
  }

  // Общее время в миллисекундах
  let diffMs = endDate - startDate;

  // Вычитаем перерыв
  diffMs -= breakMinutes * 60 * 1000;

  if (diffMs <= 0) {
    alert('Перерыв не может быть больше или равен общему времени работы.');
    return;
  }

  // Время в часах с дробной частью
  const diffHours = diffMs / (1000 * 60 * 60);

  // Итоговая стоимость
  const totalCost = diffHours * hourlyRate;

  const resultDiv = document.getElementById('wpcalc_result');
  resultDiv.innerHTML = `Общее время работы: ${diffHours.toFixed(2)} часов<br>Общая стоимость: ${totalCost.toFixed(2)} ₽`;
}

Как учитывать выходные и праздничные дни

Для более точного расчёта времени нужно исключить выходные и праздники, если работа в эти дни не ведётся. Для этого можно использовать PHP и WordPress cron, а также массивы с датами праздников.

Пример функции для исключения выходных и праздников на PHP

function wpcalcru_exclude_weekends_and_holidays($start, $end, $holidays = []) {
  $current = clone $start;
  $workSeconds = 0;

  while ($current < $end) {
    $weekday = (int) $current->format('N'); // 6 - суббота, 7 - воскресенье
    $dateStr = $current->format('Y-m-d');

    if ($weekday < 6 && !in_array($dateStr, $holidays)) {
      $workSeconds += 86400; // добавляем день работы в секундах
    }
    $current->modify('+1 day');
  }

  return $workSeconds;
}

Эту функцию можно интегрировать в серверную часть расчётов, чтобы учитывать только рабочие дни.

Интеграция с REST API для удалённого вычисления

Если расчёты становятся сложными, логично вынести их на сервер через REST API WordPress. Клиент отправляет данные, сервер возвращает результат.

Пример регистрации эндпойнта и обработчика в functions.php

add_action('rest_api_init', function () {
  register_rest_route('wpcalc/v1', '/calculate-time', [
    'methods' => 'POST',
    'callback' => 'wpcalcru_rest_calculate_time',
    'permission_callback' => '__return_true',
  ]);
});

function wpcalcru_rest_calculate_time(WP_REST_Request $request) {
  $start = $request->get_param('start');
  $end = $request->get_param('end');
  $break = (int) $request->get_param('break');
  $rate = (float) $request->get_param('rate');

  $startDate = new DateTime($start);
  $endDate = new DateTime($end);

  if ($endDate <= $startDate) {
    return new WP_Error('invalid_time', 'Время окончания должно быть больше времени начала', ['status' => 400]);
  }

  $diff = $endDate->getTimestamp() - $startDate->getTimestamp();
  $diff -= $break * 60;

  if ($diff <= 0) {
    return new WP_Error('invalid_break', 'Перерыв не может превышать или равняться времени работы', ['status' => 400]);
  }

  $hours = $diff / 3600;
  $cost = $hours * $rate;

  return [
    'work_hours' => round($hours, 2),
    'total_cost' => round($cost, 2),
  ];
}

Выводы и рекомендации

Создание калькулятора расчёта времени работы в WordPress — задача, решаемая с помощью комбинации HTML-форм, JavaScript и PHP. Для базового функционала достаточно клиентской части, но для учёта рабочих дней и сложной логики лучше использовать серверные вычисления и REST API. Готовые плагины из WPSHOP помогут ускорить разработку и добавить дополнительные возможности.

Как создать калькулятор с удалённым расчётом на WordPress с помощью REST API
18.01.2026
WooCommerce: авторизация пользователя по номеру телефона с SMS-подтверждением
23.04.2026
Настройка и отладка счетчика посещаемости WordPress с примерами
28.02.2026
Как создать калькулятор сложных расчетов с учетом зависимостей в WordPress
08.02.2026
Как отладить и решить проблемы с отправкой данных калькулятора в WooCommerce
03.06.2026