12.223). Default '' keeps the previous // unseparated output for platforms that don't configure one — note // platform_trans() returns the key itself when no default is passed. $thousandSeparator = platform_trans('platform_currency_thousand_separator', null, ''); if ($thousandSeparator !== '') { $wholeHours = number_format($wholeHours, 0, '', $thousandSeparator); } $currencySymbol = platform_currency_symbol(); $timeValue = ($isNegative ? '-' : '') . $wholeHours . ':' . $restMinutes; // Check if currency symbol should be at the end (default is start) $positionEnd = platform_trans('platform_currency_position_end', null, false); if ($positionEnd) { $formattedTime = $timeValue . ' ' . $currencySymbol; } else { $formattedTime = $currencySymbol . ' ' . $timeValue; } return $formattedTime; } /** * Converts a time string in the format "HHH:MM" to minutes. * * @param string $hhh_mm The time string to convert. * @return int The time in minutes. */ function dbFormat($hhh_mm) { list($wholeHours, $restMinutes) = explode(':', $hhh_mm); // Check if the wholeHours part is negative $isNegative = $wholeHours < 0; // Convert the values to absolute for calculation $wholeHours = abs($wholeHours); $restMinutes = abs($restMinutes); // Calculate the total minutes $minutes = ($wholeHours * 60) + $restMinutes; // Adjust the sign if the original value was negative return $isNegative ? -$minutes : $minutes; } function hoursAndMinutes($time, $format = '%02d:%02d') // Usage: echo hoursAndMinutes('188', '%02d Hours, %02d Minutes'); // this will output 3 Hours, 8 Minutes // hoursAndMinutes('188', '%02dH,%02dM'); // will output 3H,8M { if ($time < 1) { return; } $hours = floor($time / 60); $minutes = ($time % 60); return sprintf($format, $hours, $minutes); } /** * Convert days to human-readable format * Returns format like "2 weeks", "3 months", "1 year" * Uses 30 days = 1 month, 7 days = 1 week * * @param int $days The number of days to convert * @return string The human-readable format */ /** * Return the translated display name for an account. * Looks up the translation key "messages.{name}_account". * Falls back to ucfirst of the raw DB name when no translation exists. * * @param string $rawName The raw account name from the database (e.g. "personal 2") * @return string */ function account_name(string $rawName): string { $key = 'messages.' . $rawName . '_account'; $translated = __($key); // __() returns the key itself when no translation is found return $translated === $key ? ucfirst($rawName) : $translated; } function daysToHumanReadable($days) { if ($days < 7) { return $days . ' ' . trans_choice('day|days', $days); } elseif ($days < 30) { $weeks = round($days / 7); return $weeks . ' ' . trans_choice('week|weeks', $weeks); } elseif ($days < 365) { $months = round($days / 30); return $months . ' ' . trans_choice('month|months', $months); } else { $years = round($days / 365); return $years . ' ' . trans_choice('year|years', $years); } }