= $startTime) { $endTime = strtotime($today . ' ' . $workEnd . ' +1 day'); } else { // 如果当前时间在上班时间之前,则startTime为昨日 $startTime = strtotime($today . ' ' . $workStart . ' -1 day'); } } // 判断当前时间是否在工作时间内 return $now >= $startTime && $now <= $endTime; } catch (\Exception $e) { Log::error('判断工作时间出错: ' . $e->getMessage()); return false; } } /** * 解析工作日字符串为数组 * @param string $workDay * @return array */ private static function parseWorkDays(string $workDay): array { if (empty($workDay)) { return []; } $days = explode(',', $workDay); $result = []; foreach ($days as $day) { $day = trim($day); if (is_numeric($day) && $day >= 1 && $day <= 7) { $result[] = (int)$day; } } return array_unique($result); } /** * 获取剩余工作时间(秒) * @param string $workDay * @param string $workStart * @param string $workEnd * @return int */ public static function getRemainingWorkTime(string $workDay, string $workStart, string $workEnd): int { if (!self::isWorkingTime($workDay, $workStart, $workEnd)) { return 0; } $now = time(); $today = date('Y-m-d'); $endTime = strtotime($today . ' ' . $workEnd); // 处理跨天情况 if ($endTime < $now) { $endTime = strtotime($today . ' ' . $workEnd . ' +1 day'); } return max(0, $endTime - $now); } /** * 获取下个工作时间开始的时间戳 * @param string $workDay * @param string $workStart * @param string $workEnd * @return int */ public static function getNextWorkTime(string $workDay, string $workStart, string $workEnd): int { $now = time(); $workDays = self::parseWorkDays($workDay); $currentWeekDay = date('N', $now); // 查找下一个工作日 $nextWorkDay = null; for ($i = 0; $i < 7; $i++) { $checkDay = ($currentWeekDay + $i) % 7; $checkDay = $checkDay == 0 ? 7 : $checkDay; if (in_array($checkDay, $workDays)) { $nextWorkDay = $checkDay; $daysToAdd = $i; break; } } if ($nextWorkDay === null) { return 0; } // 计算下一个工作日的开始时间 $nextDate = date('Y-m-d', strtotime("+{$daysToAdd} days")); $nextStartTime = strtotime($nextDate . ' ' . $workStart); return $nextStartTime; } }