Files
onboard/app/Services/DateRangeService.php
brusnitsyn 9ee33bc517 * блокировка изменения отчета для врача
* вывод данных из отчетов для ролей адм и зав
* поправил ширину стобцов ввода
* добавил календарь на страницу статистики
* переделал календарь у заведующего на странице отчета
* добавил и привязал метрики в статистику
2026-02-03 17:03:37 +09:00

74 lines
1.9 KiB
PHP

<?php
namespace App\Services;
use Illuminate\Support\Carbon;
class DateRangeService
{
public function getDateRangeForUser($user, $startAt = null, $endAt = null): array
{
if ($startAt && $endAt) {
return $this->getCustomDateRange($startAt, $endAt, $user);
}
return $this->getDefaultDateRange($user);
}
public function isRangeOneDay($startAt = null, $endAt = null): bool
{
if (!$startAt || !$endAt) return false;
$startDate = $this->parseDate($startAt);
$endDate = $this->parseDate($endAt);
if ($startDate->diffInDays($endDate) === 1.0) return true;
return false;
}
private function getCustomDateRange($startAt, $endAt, $user): array
{
$startDate = $this->parseDate($startAt);
$endDate = $this->parseDate($endAt);
if ($startDate->isSameDay($endDate)) {
$startDate = $startDate->subDay()->setTime(6, 0);
$endDate = $endDate->setTime(6, 0);
} else {
$startDate = $startDate->setTime(6, 0);
$endDate = $endDate->setTime(6, 0);
}
return [
$startDate->format('Y-m-d H:i:s'),
$endDate->format('Y-m-d H:i:s')
];
}
private function getDefaultDateRange($user): array
{
$startDate = Carbon::now('Asia/Yakutsk')
->subDay()
->setTime(6, 0);
$endDate = Carbon::now('Asia/Yakutsk')
->setTime(6, 0);
return [
$startDate->format('Y-m-d H:i:s'),
$endDate->format('Y-m-d H:i:s')
];
}
public function parseDate($dateInput): Carbon
{
if (is_numeric($dateInput)) {
return Carbon::createFromTimestampMs($dateInput)
->setTimezone('Asia/Yakutsk');
}
return Carbon::parse($dateInput, 'Asia/Yakutsk');
}
}