mirror of
https://github.com/lone-cloud/prism
synced 2026-06-03 08:43:10 -07:00
73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
package util
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func FormatPhoneNumber(number string) string {
|
|
if number == "" {
|
|
return number
|
|
}
|
|
|
|
// US/Canada: +1 (234) 567-8901
|
|
if strings.HasPrefix(number, "+1") && len(number) == 12 {
|
|
return fmt.Sprintf("+1 (%s) %s-%s", number[2:5], number[5:8], number[8:])
|
|
}
|
|
|
|
// International: +XX XXXX XXXX
|
|
if strings.HasPrefix(number, "+") && len(number) > 4 {
|
|
digits := number[1:]
|
|
var countryCode, rest string
|
|
|
|
for i := 1; i <= 3 && i < len(digits); i++ {
|
|
if digits[i] < '0' || digits[i] > '9' {
|
|
break
|
|
}
|
|
countryCode = digits[:i+1]
|
|
rest = digits[i+1:]
|
|
}
|
|
|
|
if len(rest) >= 3 {
|
|
var parts []string
|
|
for len(rest) > 0 {
|
|
size := 3
|
|
if len(rest) == 4 || len(rest) == 8 {
|
|
size = 4
|
|
}
|
|
if size > len(rest) {
|
|
size = len(rest)
|
|
}
|
|
parts = append(parts, rest[:size])
|
|
rest = rest[size:]
|
|
}
|
|
return "+" + countryCode + " " + strings.Join(parts, " ")
|
|
}
|
|
}
|
|
|
|
return number
|
|
}
|
|
|
|
func FormatUptime(d time.Duration) string {
|
|
days := int(d.Hours()) / 24
|
|
hours := int(d.Hours()) % 24
|
|
minutes := int(d.Minutes()) % 60
|
|
seconds := int(d.Seconds()) % 60
|
|
|
|
parts := []string{}
|
|
if days > 0 {
|
|
parts = append(parts, fmt.Sprintf("%dd", days))
|
|
}
|
|
if hours > 0 {
|
|
parts = append(parts, fmt.Sprintf("%dh", hours))
|
|
}
|
|
if minutes > 0 {
|
|
parts = append(parts, fmt.Sprintf("%dm", minutes))
|
|
}
|
|
if seconds > 0 || len(parts) == 0 {
|
|
parts = append(parts, fmt.Sprintf("%ds", seconds))
|
|
}
|
|
|
|
return strings.Join(parts, " ")
|
|
}
|