| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- package utils
- import (
- "fmt"
- "time"
- _ "time/tzdata" // 挂载时区数据库 否则docker报错
- )
- var sysLoc *time.Location
- func loc() *time.Location {
- if sysLoc == nil {
- var err error
- sysLoc, err = time.LoadLocation("Asia/Shanghai") // 设置系统为东八区 -- 具体根据项目更改
- if err != nil {
- panic(err)
- }
- }
- return sysLoc
- }
- const MonthDateTimeFormatLayout = "01-02 15:04:05"
- const DateTimeFormatLayout = "2006-01-02 15:04:05"
- const MonthFormatLayout = "2006-01"
- func Time() time.Time {
- return time.Now().In(loc())
- }
- func SecondsUntilSecond(targetDate string) (int64, error) {
- // 解析目标日期(注意时区处理)
- targetTime, err := time.ParseInLocation(DateTimeFormatLayout, targetDate, loc())
- if err != nil {
- return 0, fmt.Errorf("invalid date format, expected YYYY-MM-DD: %v", err)
- }
- // 计算时间差
- now := time.Now()
- duration := targetTime.Sub(now)
- // 返回总秒数(忽略纳秒部分)
- return int64(duration.Seconds()), nil
- }
- // 计算目标时间距离当前的剩余秒数
- func SecondsUntil(targetDate string) (int64, error) {
- // 解析目标日期(注意时区处理)
- targetTime, err := time.ParseInLocation("2006-01-02", targetDate, loc())
- if err != nil {
- return 0, fmt.Errorf("invalid date format, expected YYYY-MM-DD: %v", err)
- }
- // 计算时间差
- now := time.Now()
- duration := targetTime.Sub(now)
- // 返回总秒数(忽略纳秒部分)
- return int64(duration.Seconds()), nil
- }
- func NextDate(dateStr string) (string, error) {
- dateTime, err := ParseDateInLocation(dateStr)
- if err != nil {
- return "2006-01-02", err
- }
- return dateTime.AddDate(0, 0, 1).Format(DateFormatLayout), nil
- }
- func TimeMonth() string {
- return Time().Format(MonthFormatLayout)
- }
- func NowDateTimeSec() string {
- return Time().Format(DateTimeFormatLayout)
- }
- func ParseDateCheck(dateStr string) (string, error) {
- _, err := time.Parse("2006-01-02", dateStr)
- if err != nil {
- return dateStr, fmt.Errorf("日期解析错误:%s", err)
- }
- return dateStr, nil
- }
- func ParseTimeStamp(timestamp int64) time.Time {
- return time.Unix(timestamp, 0).In(loc())
- }
- func NowTimeSecStr() string {
- return time.Now().Format(DateTimeFormatLayout)
- }
- func ParseTimeStampToDateTimeStr(timestamp int64) string {
- return ParseTimeStamp(timestamp).Format(DateTimeFormatLayout)
- }
- func ParseStampToMonthDateStr(timestamp int64) string {
- return ParseTimeStamp(timestamp).Format(MonthDateTimeFormatLayout)
- }
- func ParseTimeStampToDateStr(timestamp int64) string {
- return ParseTimeStamp(timestamp).Format(DateFormatLayout)
- }
- func TimeStamp() int64 {
- return Time().Unix()
- }
|