95 lines
2.4 KiB
Go
95 lines
2.4 KiB
Go
package utils
|
|
|
|
import (
|
|
"math"
|
|
"time"
|
|
)
|
|
|
|
// RoundToTwoDecimals rounds a float64 to two decimal places
|
|
func RoundToTwoDecimals(value float64) float64 {
|
|
return math.Round(value*100) / 100
|
|
}
|
|
|
|
// StartOfDay returns the start of the day for a given time
|
|
func StartOfDay(t time.Time) time.Time {
|
|
return time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location())
|
|
}
|
|
|
|
// EndOfDay returns the end of the day for a given time
|
|
func EndOfDay(t time.Time) time.Time {
|
|
return time.Date(t.Year(), t.Month(), t.Day(), 23, 59, 59, 999999999, t.Location())
|
|
}
|
|
|
|
// StartOfMonth returns the first day of the month for a given time
|
|
func StartOfMonth(t time.Time) time.Time {
|
|
return time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, t.Location())
|
|
}
|
|
|
|
// EndOfMonth returns the last day of the month for a given time
|
|
func EndOfMonth(t time.Time) time.Time {
|
|
return StartOfMonth(t).AddDate(0, 1, 0).Add(-time.Nanosecond)
|
|
}
|
|
|
|
// StartOfYear returns the first day of the year for a given time
|
|
func StartOfYear(t time.Time) time.Time {
|
|
return time.Date(t.Year(), 1, 1, 0, 0, 0, 0, t.Location())
|
|
}
|
|
|
|
// EndOfYear returns the last day of the year for a given time
|
|
func EndOfYear(t time.Time) time.Time {
|
|
return time.Date(t.Year(), 12, 31, 23, 59, 59, 999999999, t.Location())
|
|
}
|
|
|
|
// StartOfWeek returns the start of the week (Monday) for a given time
|
|
func StartOfWeek(t time.Time) time.Time {
|
|
weekday := int(t.Weekday())
|
|
if weekday == 0 {
|
|
weekday = 7 // Sunday is 7
|
|
}
|
|
return StartOfDay(t.AddDate(0, 0, -(weekday - 1)))
|
|
}
|
|
|
|
// EndOfWeek returns the end of the week (Sunday) for a given time
|
|
func EndOfWeek(t time.Time) time.Time {
|
|
return EndOfDay(StartOfWeek(t).AddDate(0, 0, 6))
|
|
}
|
|
|
|
// ParseDate parses a date string in YYYY-MM-DD format
|
|
func ParseDate(dateStr string) (time.Time, error) {
|
|
return time.Parse("2006-01-02", dateStr)
|
|
}
|
|
|
|
// FormatDate formats a time to YYYY-MM-DD string
|
|
func FormatDate(t time.Time) string {
|
|
return t.Format("2006-01-02")
|
|
}
|
|
|
|
// Min returns the minimum of two integers
|
|
func Min(a, b int) int {
|
|
if a < b {
|
|
return a
|
|
}
|
|
return b
|
|
}
|
|
|
|
// Max returns the maximum of two integers
|
|
func Max(a, b int) int {
|
|
if a > b {
|
|
return a
|
|
}
|
|
return b
|
|
}
|
|
|
|
// Abs returns the absolute value of a float64
|
|
func Abs(value float64) float64 {
|
|
return math.Abs(value)
|
|
}
|
|
|
|
// CalculatePercentage calculates the percentage of part relative to total
|
|
func CalculatePercentage(part, total float64) float64 {
|
|
if total == 0 {
|
|
return 0
|
|
}
|
|
return RoundToTwoDecimals((part / total) * 100)
|
|
}
|