FsUtils.ts 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. export class FsUtils {
  2. private static unit = ["K", "M", "B", "T",
  3. "aa", "bb", "cc", "dd", "ee", "ff", "gg", "hh",
  4. "ii", "jj", "kk", "ll", "mm", "nn", "oo", "pp",
  5. "qq", "rr", "ss", "tt", "uu", "vv", "ww",
  6. "xx", "yy", "zz",
  7. "AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH",
  8. "II", "JJ", "KK", "LL", "MM", "NN", "OO", "PP",
  9. "QQ", "RR", "SS", "TT", "UU", "VV", "WW",
  10. "XX", "YY", "ZZ"
  11. ];
  12. /**
  13. * 金币格式化
  14. * @param num
  15. */
  16. public static moneyFormat(num: number) {
  17. if (num < 1000) {
  18. return num + '';
  19. }
  20. let newNumStr = this.formateHugeNumberToString(num);
  21. let result = "";
  22. let n = newNumStr.match(/^\d+(?:\.\d{0,2})?/);
  23. let numStr = n.toString();
  24. let len = numStr.length;
  25. let dec = len % 3;
  26. let times = (len - dec) / 3;
  27. let inx = times - 1;
  28. if (dec === 0) {
  29. times--;
  30. inx--;
  31. }
  32. let dot = len - times * 3;
  33. result = numStr.slice(0, dot) + "." + numStr.slice(dot, dot + 2) + this.unit[inx];
  34. return result;
  35. }
  36. /**
  37. * 神石数值格式化
  38. * @param num
  39. */
  40. public static goldFormat(num: number) {
  41. if (num < 100000) {
  42. return num + '';
  43. }
  44. let newNumStr = this.formateHugeNumberToString(num);
  45. let result = "";
  46. let n = newNumStr.match(/^\d+(?:\.\d{0,2})?/);
  47. let numStr = n.toString();
  48. let len = numStr.length;
  49. let dec = len % 3;
  50. let times = (len - dec) / 3;
  51. let inx = times - 1;
  52. if (dec === 0) {
  53. times--;
  54. inx--;
  55. }
  56. let dot = len - times * 3;
  57. result = numStr.slice(0, dot) + "." + numStr.slice(dot, dot + 2) + this.unit[inx];
  58. return result;
  59. }
  60. /**
  61. * 把巨大的数字变成string
  62. */
  63. public static formateHugeNumberToString(value: number): string {
  64. let power10 = 0;
  65. while (value > Math.pow(10, 18)) {
  66. power10 += 10;
  67. value = Math.floor(value / Math.pow(10, 10));
  68. }
  69. let valueStr = value + "";
  70. for (let i = 0; i < power10; i++) {
  71. valueStr += "0";
  72. }
  73. return valueStr;
  74. }
  75. /**
  76. * 将数值保留2位小数后格式化成金额形式
  77. * @param num 数值(Number或者String)
  78. * @type {String}
  79. */
  80. public static formatCurrency(num: any, length: number = 2): string {
  81. num = parseFloat(num);
  82. var result;
  83. if (num < 10000) {
  84. result = this.toFixed(num, 0);
  85. }
  86. else if (num < 100000000) {
  87. var n = num / 10000;
  88. result = this.isInteger(n) ? n.toString() + "万" : this.toFixed(n, length) + "万";
  89. }
  90. else if (num < 1000000000000) {
  91. var n = num / 100000000;
  92. result = this.isInteger(n) ? n.toString() + "亿" : this.toFixed(n, length) + "亿";
  93. }
  94. else {
  95. var n = num / 1000000000000;
  96. result = this.isInteger(n) ? n.toString() + "兆" : this.toFixed(n, length) + "兆";
  97. }
  98. return result;
  99. }
  100. /**
  101. * 没有四舍五入的fix方法
  102. */
  103. public static toFixed(value: any, length: number): string {
  104. value = value.toString();
  105. var pointIndex = value.lastIndexOf(".");
  106. if (pointIndex == -1) {
  107. return value;
  108. }
  109. if (length > 0) {
  110. return value.substring(0, pointIndex + length + 1);
  111. }
  112. else {
  113. return value.substring(0, pointIndex + length);
  114. }
  115. }
  116. /**
  117. * 判断是否是整型
  118. */
  119. public static isInteger(x: number): boolean {
  120. return x % 1 === 0;
  121. }
  122. /**
  123. * 时间格式
  124. */
  125. public static dateFormat(time: number): string {
  126. let dt = new Date(time);
  127. let y = dt.getFullYear();
  128. let _m = dt.getMonth() + 1;
  129. let m = _m < 10 ? "0" + _m : _m;
  130. let _d = dt.getDate();
  131. let d = _d < 10 ? "0" + _d : _d;
  132. let _h = dt.getHours();
  133. let h = _h < 10 ? "0" + _h : _h;
  134. let _minutes = dt.getMinutes();
  135. let minutes = _minutes < 10 ? "0" + _minutes : _minutes;
  136. let _s = dt.getSeconds();
  137. let s = _s < 10 ? "0" + _s : _s;
  138. return y + "年" + m + "月" + d + "日" + " " + h + "时" + minutes + "分" + s + "秒";
  139. }
  140. /**金币计算 */
  141. public static formateHugeNumber(value: number): { value: number, power10: number } {
  142. let power10 = 0;
  143. while (value > Math.pow(10, 18)) {
  144. power10 += 10;
  145. value = Math.floor(value / Math.pow(10, 10));
  146. }
  147. return { value: value, power10: power10 };
  148. }
  149. /**超长名字格式化 */
  150. public static beautySub(str, len) {
  151. var reg = /[\u4e00-\u9fa5]/g, //专业匹配中文
  152. slice = str.substring(0, len),
  153. chineseCharNum = (~~(slice.match(reg) && slice.match(reg).length)),
  154. realen = slice.length * 2 - chineseCharNum;
  155. return str.substr(0, realen) + (realen < str.length ? "..." : "");
  156. }
  157. /**
  158. * 今日的0点秒数
  159. */
  160. public static getTodayTime() {
  161. var date = new Date();
  162. return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0).getTime() / 1000;
  163. }
  164. /**
  165. * 格式化倒计时
  166. */
  167. public static formatBattleTime(time: number): string {
  168. let day = Math.floor(time / 3600 / 24);
  169. let h = Math.floor(time / 3600 % 24) < 10 ? Math.floor(time / 3600 % 24) : Math.floor(time / 3600 % 24);
  170. let m = Math.floor(time / 60 % 60) < 10 ? Math.floor(time / 60 % 60) : Math.floor(time / 60 % 60);
  171. let s = Math.floor(time % 60) < 10 ? Math.floor(time % 60) : Math.floor(time % 60);
  172. let result = "";
  173. if (day > 0) {
  174. result = day + "天" + h + "时" + m + "分" + s + "秒";
  175. } else if (h > 0) {
  176. result = h + "时" + m + "分" + s + "秒";
  177. } else if (m > 0) {
  178. result = m + "分" + s + "秒";
  179. } else {
  180. result = s + "秒";
  181. }
  182. return result;
  183. }
  184. }