setTimezone(self::timezone()); } catch (Throwable) { return null; } } public static function formatDateTime(mixed $value): string { return self::parse($value)?->format('Y-m-d H:i') ?? '-'; } public static function formatWaiting(mixed $value, ?CarbonInterface $now = null): string { $startedAt = self::parse($value); if ($startedAt === null) { return '-'; } $nowAt = $now === null ? self::now() : CarbonImmutable::instance($now)->setTimezone(self::timezone()); if ($startedAt->greaterThan($nowAt)) { return '-'; } $hours = intdiv($startedAt->diffInSeconds($nowAt), 3600); if ($hours < 1) { return '不足1小时'; } $days = intdiv($hours, 24); $remainingHours = $hours % 24; $parts = []; if ($days > 0) { $parts[] = $days . '天'; } if ($remainingHours > 0) { $parts[] = $remainingHours . '小时'; } return implode('', $parts); } }