main_vip.go 849 B

123456789101112131415161718192021222324252627282930313233
  1. package model
  2. import (
  3. "math"
  4. "time"
  5. )
  6. // MainVip represents bilibili vip info.
  7. type MainVip struct {
  8. Mid int64 `json:"mid"`
  9. VipType int8 `json:"vip_type"` // 大会员类型 0.非大会员 1.月度大会员 2.年度会员
  10. PayType int8 `json:"pay_type"`
  11. VipStatus int8 `json:"vip_status"` //大会员状态: 0.过期 1.未过期 2.冻结 3.封禁
  12. VipDueDate int64 `json:"vip_due_date"`
  13. }
  14. // IsVip returns true if user is vip.
  15. func (mv *MainVip) IsVip() bool {
  16. return mv.VipType != 0 && (mv.VipStatus == 1 || mv.VipStatus == 3)
  17. }
  18. // Months returns vip months.
  19. func (mv *MainVip) Months() int32 {
  20. if !mv.IsVip() {
  21. return 0
  22. }
  23. nowInMs := time.Now().UnixNano() / int64(time.Millisecond)
  24. span := mv.VipDueDate - nowInMs
  25. if span <= 0 {
  26. return 0
  27. }
  28. return int32(math.Floor(float64(span) / 1000 / 60 / 60 / 24 / 31))
  29. }