getActivity.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. const getTimeAgo = (date) => {
  2. const seconds = (new Date().getTime() - new Date(date).getTime()) / 1000;
  3. if (seconds < 60) {
  4. return Math.round(seconds)
  5. }
  6. const minutes = seconds / 60;
  7. if (minutes < 60) {
  8. return Math.round(minutes)
  9. }
  10. const hours = minutes / 60;
  11. if (hours < 24) {
  12. return Math.round(hours)
  13. }
  14. const days = hours / 24;
  15. return Math.round(days)
  16. };
  17. const getWeekNumber = (date) => {
  18. const year = date.getFullYear();
  19. const oneJan = new Date(year, 0, 1);
  20. const dayIndex = (date.getDay() + 6) % 7;
  21. const daysSinceFirstDay = Math.floor((date.getTime() - oneJan.getTime()) / 86400000);
  22. const weekIndex = Math.floor((daysSinceFirstDay + oneJan.getDay() - dayIndex) / 7);
  23. return `${year}-${weekIndex}`;
  24. };
  25. const countAllTransactionPeriods = (address, transactions) => {
  26. const uniqueDays = new Set();
  27. const uniqueWeeks = new Set();
  28. const uniqueMonths = new Set();
  29. const uniqueContracts = new Set();
  30. console.log('transactions',transactions);
  31. transactions.forEach((transaction) => {
  32. if (transaction.from.toLowerCase() !== address.toLowerCase()) return;
  33. const timestamp = new Date(transaction.receivedAt);
  34. const year = timestamp.getFullYear();
  35. const month = timestamp.getMonth();
  36. const day = timestamp.getDate();
  37. const week = getWeekNumber(timestamp);
  38. uniqueDays.add(`${year}-${month}-${day}`);
  39. uniqueWeeks.add(`${year}-${week}`);
  40. uniqueMonths.add(`${year}-${month}`);
  41. uniqueContracts.add(transaction.to);
  42. });
  43. return {
  44. dayActivity: uniqueDays.size,
  45. weekActivity: uniqueWeeks.size,
  46. monthActivity: uniqueMonths.size,
  47. contractActivity: uniqueContracts.size,
  48. };
  49. };
  50. export const getActivities = async (address, transactions) => {
  51. if (transactions.length === 0) return ({
  52. dayActivity: 0,
  53. weekActivity: 0,
  54. monthActivity: 0,
  55. contractActivity: 0,
  56. zks2_last_tx: '无交易',
  57. })
  58. const {
  59. dayActivity,
  60. weekActivity,
  61. monthActivity,
  62. contractActivity
  63. } = countAllTransactionPeriods(address, transactions);
  64. const lastTransaction = transactions[0];
  65. const zks2_last_tx = getTimeAgo(lastTransaction.receivedAt) || '无交易';
  66. return {
  67. dayActivity,
  68. weekActivity,
  69. monthActivity,
  70. contractActivity,
  71. zks2_last_tx,
  72. }
  73. }