time.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package utils
  2. import (
  3. "fmt"
  4. "time"
  5. _ "time/tzdata" // 挂载时区数据库 否则docker报错
  6. )
  7. var sysLoc *time.Location
  8. func loc() *time.Location {
  9. if sysLoc == nil {
  10. var err error
  11. sysLoc, err = time.LoadLocation("Asia/Shanghai") // 设置系统为东八区 -- 具体根据项目更改
  12. if err != nil {
  13. panic(err)
  14. }
  15. }
  16. return sysLoc
  17. }
  18. const MonthDateTimeFormatLayout = "01-02 15:04:05"
  19. const DateTimeFormatLayout = "2006-01-02 15:04:05"
  20. const MonthFormatLayout = "2006-01"
  21. func Time() time.Time {
  22. return time.Now().In(loc())
  23. }
  24. func SecondsUntilSecond(targetDate string) (int64, error) {
  25. // 解析目标日期(注意时区处理)
  26. targetTime, err := time.ParseInLocation(DateTimeFormatLayout, targetDate, loc())
  27. if err != nil {
  28. return 0, fmt.Errorf("invalid date format, expected YYYY-MM-DD: %v", err)
  29. }
  30. // 计算时间差
  31. now := time.Now()
  32. duration := targetTime.Sub(now)
  33. // 返回总秒数(忽略纳秒部分)
  34. return int64(duration.Seconds()), nil
  35. }
  36. // 计算目标时间距离当前的剩余秒数
  37. func SecondsUntil(targetDate string) (int64, error) {
  38. // 解析目标日期(注意时区处理)
  39. targetTime, err := time.ParseInLocation("2006-01-02", targetDate, loc())
  40. if err != nil {
  41. return 0, fmt.Errorf("invalid date format, expected YYYY-MM-DD: %v", err)
  42. }
  43. // 计算时间差
  44. now := time.Now()
  45. duration := targetTime.Sub(now)
  46. // 返回总秒数(忽略纳秒部分)
  47. return int64(duration.Seconds()), nil
  48. }
  49. func NextDate(dateStr string) (string, error) {
  50. dateTime, err := ParseDateInLocation(dateStr)
  51. if err != nil {
  52. return "2006-01-02", err
  53. }
  54. return dateTime.AddDate(0, 0, 1).Format(DateFormatLayout), nil
  55. }
  56. func TimeMonth() string {
  57. return Time().Format(MonthFormatLayout)
  58. }
  59. func NowDateTimeSec() string {
  60. return Time().Format(DateTimeFormatLayout)
  61. }
  62. func ParseDateCheck(dateStr string) (string, error) {
  63. _, err := time.Parse("2006-01-02", dateStr)
  64. if err != nil {
  65. return dateStr, fmt.Errorf("日期解析错误:%s", err)
  66. }
  67. return dateStr, nil
  68. }
  69. func ParseTimeStamp(timestamp int64) time.Time {
  70. return time.Unix(timestamp, 0).In(loc())
  71. }
  72. func NowTimeSecStr() string {
  73. return time.Now().Format(DateTimeFormatLayout)
  74. }
  75. func ParseTimeStampToDateTimeStr(timestamp int64) string {
  76. return ParseTimeStamp(timestamp).Format(DateTimeFormatLayout)
  77. }
  78. func ParseStampToMonthDateStr(timestamp int64) string {
  79. return ParseTimeStamp(timestamp).Format(MonthDateTimeFormatLayout)
  80. }
  81. func ParseTimeStampToDateStr(timestamp int64) string {
  82. return ParseTimeStamp(timestamp).Format(DateFormatLayout)
  83. }
  84. func TimeStamp() int64 {
  85. return Time().Unix()
  86. }