TimeUtil.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. // 导入 Cocos Creator 核心模块
  2. const { Director, director } = cc;
  3. /** 时间工具 */
  4. const TimeUtil = {
  5. /**
  6. * 间隔天数
  7. * @param {number|string|Date} time1 开始时间
  8. * @param {number|string|Date} [time2] 结束时间(可选,默认当前时间)
  9. * @returns {number} 间隔天数
  10. */
  11. daysBetween(time1, time2) {
  12. if (time2 == undefined) {
  13. time2 = +new Date();
  14. }
  15. let startDate = new Date(time1).toLocaleDateString();
  16. let endDate = new Date(time2).toLocaleDateString();
  17. let startTime = new Date(startDate).getTime();
  18. let endTime = new Date(endDate).getTime();
  19. return Math.abs((startTime - endTime)) / (1000 * 60 * 60 * 24);
  20. },
  21. /**
  22. * 间隔秒数,时间顺序无要求,最后会获取绝对值
  23. * @param {number} time1 时间戳1(毫秒)
  24. * @param {number} time2 时间戳2(毫秒)
  25. * @returns {number} 间隔秒数(向下取整后+1)
  26. */
  27. secsBetween(time1, time2) {
  28. let dates = Math.abs((time2 - time1)) / (1000);
  29. dates = Math.floor(dates) + 1;
  30. return dates;
  31. },
  32. /**
  33. * 代码休眠时间
  34. * @param {number} ms 休眠时间(秒)
  35. * @returns {Promise<void>} Promise 对象
  36. */
  37. sleep(ms) {
  38. return new Promise((resolve) => {
  39. setTimeout(() => {
  40. resolve();
  41. }, ms * 1000);
  42. });
  43. },
  44. /**
  45. * 等待下一帧
  46. * @returns {Promise<void>} Promise 对象
  47. */
  48. nextFrame() {
  49. return new Promise((resolve) => {
  50. requestAnimationFrame(() => {
  51. resolve();
  52. });
  53. });
  54. },
  55. /**
  56. * 将时间戳转换为指定格式的日期时间字符串
  57. * @param {number} timestamp 要转换的时间戳,单位为毫秒
  58. * @returns {string} 格式为 "年-月-日 时:分:秒" 的日期时间字符串
  59. */
  60. timeStampConvertStr(timestamp) {
  61. let date = new Date(timestamp);
  62. let formattedDate = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate() + ' ' + date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds();
  63. return formattedDate;
  64. }
  65. };
  66. /**
  67. * 时间间隔控制器,用于控制事件触发的频率
  68. * (对应原 TS 中的静态内部类 TimeIntervalController)
  69. */
  70. TimeUtil.TimeIntervalController = class {
  71. /**
  72. * 构造函数
  73. * @param {number} interval 间隔时间(毫秒)
  74. */
  75. constructor(interval) {
  76. this.lastTriggerTime = 0;
  77. this.interval = interval;
  78. }
  79. /**
  80. * 检查是否可以触发事件
  81. * @returns {boolean} true表示可以触发,false表示不能触发
  82. */
  83. canTrigger() {
  84. const currentTime = Date.now();
  85. if (currentTime - this.lastTriggerTime >= this.interval) {
  86. this.lastTriggerTime = currentTime;
  87. return true;
  88. }
  89. return false;
  90. }
  91. /**
  92. * 重置时间间隔控制器
  93. */
  94. reset() {
  95. this.lastTriggerTime = 0;
  96. }
  97. /**
  98. * 获取剩余时间
  99. * @returns {number} 距离下次可以触发的剩余时间(毫秒)
  100. */
  101. getRemainingTime() {
  102. const now = Date.now();
  103. const elapsed = now - this.lastTriggerTime;
  104. const remaining = this.interval - elapsed;
  105. return remaining > 0 ? remaining : 0;
  106. }
  107. };
  108. // 导出工具类,供其他文件导入
  109. module.exports = { TimeUtil };//使用 CommonJS 模块导出方式