index.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. /**
  2. * 获取语种
  3. */
  4. export const getLocale = function() {
  5. const language = uni.getStorageSync('language')
  6. return language || 'zh-cn'
  7. }
  8. export const scrollToElement = (selector) => {
  9. // 创建选择器查询
  10. const query = uni.createSelectorQuery().in(this);
  11. // 获取目标元素的位置信息
  12. query.select('#targetElement').boundingClientRect(data => {
  13. if (data) {
  14. // 滚动到目标元素的位置
  15. uni.pageScrollTo({
  16. scrollTop: data.top, // 目标元素距离页面顶部的距离
  17. duration: 300 // 滚动动画的持续时间,单位 ms
  18. });
  19. }
  20. }).exec();
  21. }
  22. /**
  23. * 返回格式化的时间字符串
  24. * @param {string} startTime - 开始时间
  25. * @param {string} endTime - 结束时间
  26. * @param {string} [lang='zh-cn'] - 语言选项,默认为 'zh-cn'
  27. * @returns {string} - 格式化后的时间字符串
  28. */
  29. export const returnTimeFormat = function (startTime, endTime, lang = 'zh-cn') {
  30. // 创建日期对象
  31. const start_date = new Date(startTime);
  32. const end_date = new Date(endTime);
  33. // 判断日期是否为同一天、同一月、同一年
  34. const isSameDay = start_date.toDateString() === end_date.toDateString();
  35. const isSameMonth = start_date.getFullYear() === end_date.getFullYear() && start_date.getMonth() === end_date.getMonth();
  36. const isSameYear = start_date.getFullYear() === end_date.getFullYear();
  37. /**
  38. * 用于补零
  39. * @param {number} num - 需要补零的数字
  40. * @returns {string} - 补零后的字符串
  41. */
  42. function padZero(num) {
  43. return String(num).padStart(2, '0');
  44. }
  45. /**
  46. * 根据语言格式化日期
  47. * @param {Date} date - 日期对象
  48. * @param {string} lang - 语言选项
  49. * @returns {string} - 格式化后的日期字符串
  50. */
  51. function formatDate(date, lang) {
  52. const year = date.getFullYear();
  53. const month = padZero(date.getMonth() + 1);
  54. const day = padZero(date.getDate());
  55. const hours = padZero(date.getHours());
  56. const minutes = padZero(date.getMinutes());
  57. if (lang === 'zh-cn' || lang === 'ja-jp') {
  58. return `${year}年${month}月${day}日 ${hours}:${minutes}`;
  59. } else if (lang === 'en-us' || lang === 'en') {
  60. const options = { year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: 'numeric' };
  61. return date.toLocaleDateString('en-US', options);
  62. }
  63. }
  64. /**
  65. * 格式化时间
  66. * @param {Date} date - 日期对象
  67. * @returns {string} - 格式化后的时间字符串
  68. */
  69. function formatTime(date) {
  70. const hours = padZero(date.getHours());
  71. const minutes = padZero(date.getMinutes());
  72. return `${hours}:${minutes}`;
  73. }
  74. let month = padZero(end_date.getMonth() + 1);
  75. let day = padZero(end_date.getDate());
  76. // 根据语言和日期关系返回相应的格式化字符串
  77. if (lang === 'zh-cn' || lang === 'ja-jp') {
  78. if (isSameDay) {
  79. return `${formatDate(start_date, 'zh-cn')} - ${formatTime(end_date)}`;
  80. } else if (isSameMonth) {
  81. return `${formatDate(start_date, 'zh-cn')} - ${month}月${day}日 ${formatTime(end_date)}`;
  82. } else if (isSameYear) {
  83. return `${formatDate(start_date, 'zh-cn')} - ${month}月${day}日 ${formatTime(end_date)}`;
  84. } else {
  85. return `${formatDate(start_date, 'zh-cn')} - ${formatDate(end_date, 'zh-cn')}`;
  86. }
  87. } else if (lang === 'en-us' || lang === 'en') {
  88. if (isSameDay) {
  89. return `${formatDate(start_date, 'en-us')} - ${formatTime(end_date)}`;
  90. } else if (isSameMonth) {
  91. const endFormatted = formatDate(end_date, 'en-us').split(', ');
  92. return `${formatDate(start_date, 'en-us')} - ${endFormatted[1]}`;
  93. } else if (isSameYear) {
  94. const endFormatted = formatDate(end_date, 'en-us').split(', ');
  95. return `${formatDate(start_date, 'en-us')} - ${endFormatted[1]}`;
  96. } else {
  97. return `${formatDate(start_date, 'en-us')} - ${formatDate(end_date, 'en-us')}`;
  98. }
  99. }
  100. }
  101. export function returnEscapeHtml(unsafe) {
  102. return unsafe
  103. .replace(/&/g, "&")
  104. .replace(/</g, "&lt;")
  105. .replace(/>/g, "&gt;")
  106. .replace(/"/g, "&quot;")
  107. .replace(/'/g, "&#039;");
  108. }
  109. export function convertRichTextToWXML(html) {
  110. // 定义一个正则表达式来匹配常见的HTML标签
  111. const htmlTagRegex = /<\s*(\w+)(?:\s+(?:[\w:-]+)(?:\s*=\s*(?:"[^"]*"|'[^']*'|[\w-]+)|[\w-]*))?\s*(?:\/>|>([\s\S]*?)<\/\1>)/g;
  112. // 定义一个函数来转换单个标签
  113. function convertTag(tag, content) {
  114. // 这里可以根据需要转换不同的标签,例如将<p>转换为<view>
  115. if (tag === 'p') {
  116. return `<view>${content}</view>`;
  117. }
  118. // 对于不支持的标签,可以选择忽略或者返回原始内容
  119. return `<${tag}>${content}</${tag}>`;
  120. }
  121. // 替换HTML标签
  122. return html.replace(htmlTagRegex, (match, p1, p2) => {
  123. return convertTag(p1.toLowerCase(), p2 ? p2 : '');
  124. });
  125. }