pageTime.uts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import { dbGet } from "./db"
  2. import { PAGE_PVER_TIME, APP_PVER_TIME } from '../config.uts';
  3. import { ResidenceTimeReturn } from '../../interface.uts'
  4. import { dbSet, dbRemove } from "./db";
  5. // 首次访问时间
  6. const FIRST_VISIT_TIME_KEY = '__first__visit__time'
  7. // 最后访问时间
  8. const LAST_VISIT_TIME_KEY = '__last__visit__time'
  9. // 访问总数
  10. const TOTAL_VISIT_COUNT = '__total__visit__count'
  11. const FIRST_TIME = '__first_time'
  12. // 页面停留时间记录key
  13. const PAGE_RESIDENCE_TIME = '__page__residence__time'
  14. let First_Page_Residence_Time = 0
  15. let Last_Page_Residence_Time = 0
  16. /**
  17. * 获取当前时间
  18. */
  19. export const get_time = () : number => {
  20. return Math.floor(new Date().getTime() / 1000)
  21. }
  22. /**
  23. * 设置页面首次访问时间,用户获取页面/应用停留时常
  24. */
  25. export const set_first_time = () : number => {
  26. // 获取当前时间 ,以下代码获取到是毫秒级时间戳 ,实际上用到是秒级时间戳,所以需要除以1000
  27. // const time = new Date().getTime()
  28. let time = get_time()
  29. dbSet(FIRST_TIME, time)
  30. return time
  31. }
  32. /**
  33. * 获取首次访问时间
  34. */
  35. export const get_first_visit_time = () : number => {
  36. const timeStorge = dbGet<number>(FIRST_VISIT_TIME_KEY)
  37. let time : number
  38. if (timeStorge != null && timeStorge != 0) {
  39. time = timeStorge as number
  40. } else {
  41. time = get_time()
  42. dbSet(FIRST_VISIT_TIME_KEY, time)
  43. // 首次访问需要 将最后访问时间置 0
  44. dbRemove(LAST_VISIT_TIME_KEY)
  45. }
  46. return time
  47. }
  48. /**
  49. * 最后访问时间
  50. */
  51. export const get_last_visit_time = () : number => {
  52. const timeStorge = dbGet<number>(LAST_VISIT_TIME_KEY)
  53. let time = 0
  54. if (timeStorge != null && timeStorge != 0) {
  55. time = timeStorge as number
  56. }
  57. dbSet(LAST_VISIT_TIME_KEY, get_time())
  58. return time
  59. }
  60. /**
  61. * 获取总访问次数
  62. */
  63. export const get_total_visit_count = () : number => {
  64. const timeStorge = dbGet<number>(TOTAL_VISIT_COUNT)
  65. let count = 1
  66. if (timeStorge != null) {
  67. count = timeStorge as number
  68. count++
  69. }
  70. dbSet(TOTAL_VISIT_COUNT, count)
  71. return count
  72. }
  73. /**
  74. * 获取页面 \ 应用停留时间
  75. */
  76. export const get_residence_time = (type : string) : ResidenceTimeReturn => {
  77. let residenceTime = 0
  78. const last_time = get_time()
  79. const first_time = (dbGet(FIRST_TIME) ?? last_time) as number
  80. if (first_time != 0) {
  81. residenceTime = last_time - first_time
  82. }
  83. // 将毫秒级时间戳转换为秒级时间戳,因为直接获取的是秒级时间戳,所以不需要转换
  84. // residenceTime = parseInt(residenceTime / 1000)
  85. residenceTime = residenceTime < 1 ? 1 : residenceTime
  86. let timeData : ResidenceTimeReturn = {
  87. residenceTime: residenceTime,
  88. overtime: false,
  89. }
  90. if (type === 'app') {
  91. let overtime = residenceTime > APP_PVER_TIME ? true : false
  92. timeData.overtime = overtime
  93. return timeData
  94. }
  95. if (type === 'page') {
  96. let overtime = residenceTime > PAGE_PVER_TIME ? true : false
  97. timeData.overtime = overtime
  98. return timeData
  99. }
  100. return timeData
  101. }
  102. /**
  103. * 设置页面停留时间
  104. */
  105. export const set_page_residence_time = () : number => {
  106. First_Page_Residence_Time = get_time()
  107. dbSet(PAGE_RESIDENCE_TIME, First_Page_Residence_Time)
  108. return First_Page_Residence_Time
  109. }
  110. /**
  111. * 获取页面停留时间
  112. */
  113. export const get_page_residence_time = () : number => {
  114. Last_Page_Residence_Time = get_time()
  115. First_Page_Residence_Time = dbGet<number>(PAGE_RESIDENCE_TIME) ?? 0
  116. const diff : number = Last_Page_Residence_Time - First_Page_Residence_Time
  117. return diff
  118. }