user()?->preferred_calendar ?? 'jalali'); if ($calendar === 'jalali' && class_exists(\Morilog\Jalali\Jalalian::class)) { try { // Try Jalali format: 1404/03/15 or 1404-03-15 $normalized = str_replace('/', '-', $date); $parts = explode('-', $normalized); if (count($parts) === 3) { $jYear = (int) $parts[0]; $jMonth = (int) $parts[1]; $jDay = (int) $parts[2]; // If year looks like a Jalali year (> 1300), convert if ($jYear > 1300 && $jYear < 1600) { $gregorian = \Morilog\Jalali\Jalalian::fromDateTime( \Morilog\Jalali\CalendarUtils::toGregorian($jYear, $jMonth, $jDay) ); return $gregorian->format('Y-m-d'); } } } catch (\Exception $e) { // Fall through to Carbon parse } } // Fallback: try Carbon parse try { return \Carbon\Carbon::parse($date)->format('Y-m-d'); } catch (\Exception $e) { return $date; } } /** * Format a date based on the user's calendar preference. */ public static function formatDate(?string $date, string $calendar = 'jalali', string $format = 'Y/m/d'): string { return JalaliHelper::formatDateForDisplay($date, $calendar, $format); } /** * Get the month name for a given month number. */ public static function getMonthName(int $month, string $calendar = 'jalali'): string { if ($calendar === 'jalali') { return JalaliHelper::jalaliMonthName($month); } $months = [ 1 => 'January', 2 => 'February', 3 => 'March', 4 => 'April', 5 => 'May', 6 => 'June', 7 => 'July', 8 => 'August', 9 => 'September', 10 => 'October', 11 => 'November', 12 => 'December', ]; return $months[$month] ?? ''; } /** * Get the day (of week) name. */ public static function getDayName(int $dayOfWeek, string $calendar = 'jalali'): string { if ($calendar === 'jalali') { return JalaliHelper::jalaliDayName($dayOfWeek); } $days = [ 0 => 'Sunday', 1 => 'Monday', 2 => 'Tuesday', 3 => 'Wednesday', 4 => 'Thursday', 5 => 'Friday', 6 => 'Saturday', ]; return $days[$dayOfWeek] ?? ''; } /** * Get the current date formatted based on the calendar preference. */ public static function getCurrentDate(string $calendar = 'jalali', string $format = 'Y/m/d'): string { return self::formatDate(now()->format('Y-m-d'), $calendar, $format); } /** * Get the query date range for a given month and year. */ public static function getQueryRangeForMonth(int $year, int $month, string $calendar = 'jalali'): array { if ($calendar === 'jalali') { return JalaliHelper::getQueryRangeForJalaliMonth($year, $month); } // Gregorian range $start = \Carbon\Carbon::create($year, $month, 1)->startOfDay(); $end = \Carbon\Carbon::create($year, $month, 1)->endOfMonth()->endOfDay(); return [$start, $end]; } }