| | |
| | | * Format a date in relative time (e.g., "2 days ago") |
| | | * @param string $dateStr - Date string or DateTime object |
| | | * @return string - Formatted relative time |
| | | * @throws DateMalformedStringException |
| | | */ |
| | | function jvbFormatTimeAgo(string $dateStr):string |
| | | { |
| | |
| | | $out = ''; |
| | | |
| | | if (!empty($hours) && jvbHasOperatingHours($hours)) { |
| | | $out = jvbGetFormattedHours($hours, true, true); |
| | | $out = jvbGetFormattedHours($hours); |
| | | } else { |
| | | $out = '<p class="no-hours">Hours not available</p>'; |
| | | } |
| | |
| | | /** |
| | | * Check if business is currently open based on stored hours |
| | | * |
| | | * @param array $hours_data Array of hours data from wp_option |
| | | * @param array|null $hours_data Array of hours data from wp_option |
| | | * @param string $timezone Timezone string (default: 'America/Edmonton') |
| | | * @return bool True if currently open, false if closed |
| | | * @throws DateInvalidTimeZoneException |
| | | * @throws DateMalformedStringException |
| | | */ |
| | | function jvbIsCurrentlyOpen(?array $hours_data = null, string $timezone = 'America/Edmonton'):bool |
| | | { |
| | |
| | | * @param ?string $end_time End time in H:i format (e.g., '15:15') |
| | | * @param string $timezone Timezone string (default: 'America/Edmonton') |
| | | * @return bool True if current time is within range, false otherwise |
| | | * @throws DateInvalidTimeZoneException |
| | | * @throws DateMalformedStringException |
| | | */ |
| | | function jvbIsTimeBetween(?string $start_time = null, ?string $end_time = null, string $timezone = 'America/Edmonton'):bool { |
| | | function jvbIsTimeBetween(?string $start_time = null, ?string $end_time = null):bool { |
| | | if (!$start_time && !$end_time) { |
| | | $hours = Options::get('today_hours'); |
| | | $start_time = $hours['time_start']; |
| | |
| | | } |
| | | |
| | | // Get current time in specified timezone |
| | | $current_time = new DateTime('now', new DateTimeZone($timezone)); |
| | | $current_time = new DateTime('now', wp_timezone()); |
| | | $current_time_string = $current_time->format('H:i'); |
| | | |
| | | // Normalize time formats (handle with or without seconds) |
| | |
| | | * @param string $timezone Timezone string |
| | | * @return string Next opening time description or empty string if never opens |
| | | * @throws DateInvalidTimeZoneException |
| | | * @throws DateMalformedStringException |
| | | */ |
| | | function jvbGetNextOpeningTime(array $hours_data, string $timezone = 'America/Edmonton'):string { |
| | | if (!jvbHasOperatingHours($hours_data)) { |