日期时间工具包

TimeStampToDatatime(时间戳 int64) string

函数功能 : 时间戳转日期时间

返回格式 : 字符串形式的日期时间

函数参数 : 1 时间戳 ( -1 代表当前时间 )

func main() {
	fmt.Printf("%v\n", datetime.TimeStampToDatatime(1658997310))
	// 2022-07-28 16:35:10
	fmt.Printf("%v\n", datetime.TimeStampToDatatime(-1))
	// 2023-01-05 12:13:59
}

TimeStampToDatatimeFormat(时间戳 int64, 格式 string) string

函数功能 : 时间戳转日期时间

返回格式 : 字符串形式的日期时间

函数参数 : 1 时间戳 ( -1 代表当前时间 ) 2 日期格式  

func main() {
	fmt.Printf("%v\n", datetime.TimeStampToDatatimeFormat(1658997290, "2006-01-02 15:04"))
	// 2022-07-28 16:34
	fmt.Printf("%v\n", datetime.TimeStampToDatatimeFormat(1658997290, "2006-01-02 15"))
	// 2022-07-28 16
	fmt.Printf("%v\n", datetime.TimeStampToDatatimeFormat(1658997290, "2006-01-02"))
	// 2022-07-28
	fmt.Printf("%v\n", datetime.TimeStampToDatatimeFormat(1658997290, "01/02/2006"))
	// 07/28/2022
	fmt.Printf("%v\n", datetime.TimeStampToDatatimeFormat(1658997290, "20060102"))
	// 20220728
	fmt.Printf("%v\n", datetime.TimeStampToDatatimeFormat(-1, "20060102"))
	// 20220728
}

TimeStampToDatatimeSlice(时间戳 int64) []string

函数功能 : 时间戳转日期时间切片形式

返回格式 : 字符串切片

函数参数 : 1 时间戳 ( -1 代表当前时间 )

func main() {
	fmt.Printf("%v\n", datetime.TimeStampToDatatimeSlice(1658997290))
	// [2022 07 28 16 34 50]
	fmt.Printf("%v\n", datetime.TimeStampToDatatimeSlice(-1))
	// [2023 01 05 12 15 58]
}

DateTimeToTimeStamp(日期时间 string) int64

函数功能 : 日期时间转时间戳

返回格式 : 时间戳 int64

fmt.Printf("%v\n", datetime.DateTimeToTimeStamp("2022-07-28 16:34:50"))
// 1658997290

DateTime2TimeStamp(format string, datetime string) int64

函数功能 : 日期时间转时间戳

参数 : 格式, 对应格式的时间

返回格式 : 时间戳 int64

timeStamp := datetime.DateTime2TimeStamp("01/02/2006 15:04:05", "10/26/2025 12:00:00")
Loger.Printf("时间戳 : %d", timeStamp)

FormatPastTime(时间戳 int64) (int, string, string)

函数功能 : 获取过去时间并格式化

返回格式 : 时间差, 过去时间 [ 英文 ], 过去时间 [ 中文 ]

func main() {
	timeDifference, strEn, strZh := datetime.FormatPastTime(1660707752 - 3600)
	fmt.Printf("timeDifference: %v\n", timeDifference)
	fmt.Printf("strEn: %v\n", strEn)
	fmt.Printf("strZh: %v\n", strZh)
}
// 1小时前 || ** 天前 || *** 分钟前 ...

CountDaysOfAMonth(某年某月 string) (int, error)

函数功能 : 计算某年某月天数

返回格式 : 天数, 错误

func main() {
	days, err := datetime.CountDaysOfAMonth("200402")
	if err == nil {
		fmt.Printf("days: %v\n", days)
	} else {
		fmt.Printf("err.Error(): %v\n", err.Error())
	}
	// 29
}

IsLeapYear(年份 int) bool

函数功能 : 判断某年是否为闰年

返回格式 : boolean

fmt.Printf("datetime.IsLeapYear(2000): %v\n", datetime.IsLeapYear(2000)) // true
fmt.Printf("datetime.IsLeapYear(2001): %v\n", datetime.IsLeapYear(2001)) // false

基于 DatetTime 对象的操作

DatetTime 结构体

type DateTime struct {
	Year         int
	YearString   string
	Month        int
	MonthString  string
	Day          int
	DayString    string
	Hour         int
	HourString   string
	Minute       int
	MinuteString string
	Second       int
	SecondString string
	TimeStamp    int64
	Format       string
	Result       string
	Time         time.Time
}

使用演示

package gotool

import (
	"fmt"
	"testing"

	"github.com/cnlesscode/gotool/datetime"
)

// 单元测试
// 测试命令 : go test -v -run=TestMain
func TestMain(t *testing.T) {

	dt := datetime.New()
	// 初始化当前时间
	dt.Now()
	Loger.Printf("当前时间 : %s", dt.Result)
	// 下一年
	nextYear := dt.Swicth("year", 1)
	Loger.Printf("一年后时间 : %s", nextYear.Result)
	// 下一月
	nextMonth := nextYear.Swicth("month", 1)
	Loger.Printf("一月后时间 : %s", nextMonth.Result)
	// 前一天
	lastDay := nextMonth.Swicth("day", -1)
	Loger.Printf("前一天时间 : %s", lastDay.Result)
	// 后3小时
	nextHour := lastDay.Swicth("hour", 3)
	Loger.Printf("后3小时时间 : %s", nextHour.Result)
	// 后5分钟
	nextMinute := nextHour.Swicth("minute", 5)
	Loger.Printf("后5分钟时间 : %s", nextMinute.Result)
	// 后10秒
	nextSecond := nextMinute.Swicth("second", 10)
	Loger.Printf("后10秒时间 : %s", nextSecond.Result)

	// 日期时间转换为时间戳
	timeStamp := datetime.DateTime2TimeStamp("01/02/2006 15:04:05", "10/26/2025 12:00:00")
	Loger.Printf("时间戳 : %d", timeStamp)

	// 遍历出2年24个月
	// 初始化起始时间
	startTime := datetime.New()
	startTime.InitFromTimeStamp(datetime.DateTime2TimeStamp("01/02/2006 15:04:05", "01/01/2024 00:00:00"))
	// 循环24个月
	months := make([]*datetime.DateTime, 0)
	for i := 0; i < 24; i++ {
		months = append(months, startTime.Swicth("month", i))
	}
	for _, v := range months {
		Loger.Printf("%s-%s", v.YearString, v.MonthString)
	}

	// 遍历出2个月内的天
	days := make([]*datetime.DateTime, 0)
	for i := 0; i < 2; i++ {
		// 当前月
		currentMonth := startTime.Swicth("month", i)
		dayCount := currentMonth.CountDaysOfAMonth()
		for j := 0; j < dayCount; j++ {
			days = append(days, currentMonth.Swicth("day", j))
		}
	}
	for _, v := range days {
		Loger.Printf("%s-%s-%s", v.YearString, v.MonthString, v.DayString)
	}

	// 遍历12小时
	startTimeForHour := datetime.New()
	startTimeForHour.Now()
	fmt.Printf("startTimeForHour: %v\n", startTimeForHour)
	startTimeForHour.InitFromDatatime(
		startTimeForHour.YearString + "-" +
			startTimeForHour.MonthString + "-" +
			startTimeForHour.DayString + " 00:00:00")
	hours := make([]*datetime.DateTime, 0)
	for i := 0; i < 12; i++ {
		hour := startTimeForHour.Swicth("hour", i)
		hours = append(hours, hour)
	}
	for _, hour := range hours {
		fmt.Printf("hour: %v\n", hour.Result)
	}
}