gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. // Copyright 2019 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package timeutil
  4. import (
  5. "strings"
  6. "time"
  7. "code.gitea.io/gitea/modules/translation"
  8. )
  9. // Seconds-based time units
  10. const (
  11. Minute = 60
  12. Hour = 60 * Minute
  13. Day = 24 * Hour
  14. Week = 7 * Day
  15. Month = 30 * Day
  16. Year = 12 * Month
  17. )
  18. func computeTimeDiffFloor(diff int64, lang translation.Locale) (int64, string) {
  19. var diffStr string
  20. switch {
  21. case diff <= 0:
  22. diff = 0
  23. diffStr = lang.TrString("tool.now")
  24. case diff < 2:
  25. diff = 0
  26. diffStr = lang.TrString("tool.1s")
  27. case diff < 1*Minute:
  28. diffStr = lang.TrString("tool.seconds", diff)
  29. diff = 0
  30. case diff < 2*Minute:
  31. diff -= 1 * Minute
  32. diffStr = lang.TrString("tool.1m")
  33. case diff < 1*Hour:
  34. diffStr = lang.TrString("tool.minutes", diff/Minute)
  35. diff -= diff / Minute * Minute
  36. case diff < 2*Hour:
  37. diff -= 1 * Hour
  38. diffStr = lang.TrString("tool.1h")
  39. case diff < 1*Day:
  40. diffStr = lang.TrString("tool.hours", diff/Hour)
  41. diff -= diff / Hour * Hour
  42. case diff < 2*Day:
  43. diff -= 1 * Day
  44. diffStr = lang.TrString("tool.1d")
  45. case diff < 1*Week:
  46. diffStr = lang.TrString("tool.days", diff/Day)
  47. diff -= diff / Day * Day
  48. case diff < 2*Week:
  49. diff -= 1 * Week
  50. diffStr = lang.TrString("tool.1w")
  51. case diff < 1*Month:
  52. diffStr = lang.TrString("tool.weeks", diff/Week)
  53. diff -= diff / Week * Week
  54. case diff < 2*Month:
  55. diff -= 1 * Month
  56. diffStr = lang.TrString("tool.1mon")
  57. case diff < 1*Year:
  58. diffStr = lang.TrString("tool.months", diff/Month)
  59. diff -= diff / Month * Month
  60. case diff < 2*Year:
  61. diff -= 1 * Year
  62. diffStr = lang.TrString("tool.1y")
  63. default:
  64. diffStr = lang.TrString("tool.years", diff/Year)
  65. diff -= (diff / Year) * Year
  66. }
  67. return diff, diffStr
  68. }
  69. // MinutesToFriendly returns a user-friendly string with number of minutes
  70. // converted to hours and minutes.
  71. func MinutesToFriendly(minutes int, lang translation.Locale) string {
  72. duration := time.Duration(minutes) * time.Minute
  73. return timeSincePro(time.Now().Add(-duration), time.Now(), lang)
  74. }
  75. func timeSincePro(then, now time.Time, lang translation.Locale) string {
  76. diff := now.Unix() - then.Unix()
  77. if then.After(now) {
  78. return lang.TrString("tool.future")
  79. }
  80. if diff == 0 {
  81. return lang.TrString("tool.now")
  82. }
  83. var timeStr, diffStr string
  84. for {
  85. if diff == 0 {
  86. break
  87. }
  88. diff, diffStr = computeTimeDiffFloor(diff, lang)
  89. timeStr += ", " + diffStr
  90. }
  91. return strings.TrimPrefix(timeStr, ", ")
  92. }