util.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. // 日期格式化
  2. export function parseTime(time, pattern) {
  3. if (arguments.length === 0 || !time) {
  4. return null
  5. }
  6. const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
  7. let date
  8. if (typeof time === 'object') {
  9. date = time
  10. } else {
  11. if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
  12. time = parseInt(time)
  13. } else if (typeof time === 'string') {
  14. time = time.replace(new RegExp(/-/gm), '/');
  15. }
  16. if ((typeof time === 'number') && (time.toString().length === 10)) {
  17. time = time * 1000
  18. }
  19. date = new Date(time)
  20. }
  21. const formatObj = {
  22. y: date.getFullYear(),
  23. m: date.getMonth() + 1,
  24. d: date.getDate(),
  25. h: date.getHours(),
  26. i: date.getMinutes(),
  27. s: date.getSeconds(),
  28. a: date.getDay()
  29. }
  30. const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
  31. let value = formatObj[key]
  32. // Note: getDay() returns 0 on Sunday
  33. if (key === 'a') {
  34. return ['日', '一', '二', '三', '四', '五', '六'][value]
  35. }
  36. if (result.length > 0 && value < 10) {
  37. value = '0' + value
  38. }
  39. return value || 0
  40. })
  41. return time_str
  42. }
  43. /**
  44. * 解决两个数相加精度丢失问题
  45. * @param a
  46. * @param b
  47. * @returns {Number}
  48. */
  49. export function floatAdd(a, b) {
  50. var c, d, e;
  51. if(undefined==a||null==a||""==a||isNaN(a)){a=0;}
  52. if(undefined==b||null==b||""==b||isNaN(b)){b=0;}
  53. try {
  54. c = a.toString().split(".")[1].length;
  55. } catch (f) {
  56. c = 0;
  57. }
  58. try {
  59. d = b.toString().split(".")[1].length;
  60. } catch (f) {
  61. d = 0;
  62. }
  63. e = Math.pow(10, Math.max(c, d));
  64. return (floatMul(a, e) + floatMul(b, e)) / e;
  65. }
  66. //除法去除精度损失
  67. export function accDiv(arg1, arg2) {
  68. if(!arg1 || !arg2){
  69. if(arg2 == 0){
  70. return Infinity
  71. }
  72. return arg1/arg2
  73. }
  74. var t1 = 0, t2 = 0, r1, r2;
  75. try { t1 = arg1.toString().split(".")[1].length } catch (e) { }
  76. try { t2 = arg2.toString().split(".")[1].length } catch (e) { }
  77. r1 = Number(arg1.toString().replace(".", ""));
  78. r2 = Number(arg2.toString().replace(".", ""));
  79. if(r2==0){
  80. return Infinity;
  81. }else{
  82. return (r1 / r2) * Math.pow(10, t2 - t1);
  83. }
  84. }
  85. export function numberFormat(number, decimals = 2, dec_point = '.', thousands_sep = ',') {
  86. /*
  87. * 参数说明:
  88. * number:要格式化的数字
  89. * decimals:保留几位小数
  90. * dec_point:小数点符号
  91. * thousands_sep:千分位符号
  92. * */
  93. number = accDiv(number,100)
  94. number = (number + '').replace(/[^0-9+-Ee.]/g, '');
  95. var n = !isFinite(+number) ? 0 : +number,
  96. prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
  97. sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
  98. dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
  99. s = '',
  100. toFixedFix = function (n, prec) {
  101. var k = Math.pow(10, prec);
  102. return '' + Math.round(n * k) / k;
  103. };
  104. s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
  105. var re = /(-?\d+)(\d{3})/;
  106. while (re.test(s[0])) {
  107. s[0] = s[0].replace(re, "$1" + sep + "$2");
  108. }
  109. if ((s[1] || '').length < prec) {
  110. s[1] = s[1] || '';
  111. s[1] += new Array(prec - s[1].length + 1).join('0');
  112. }
  113. return s.join(dec);
  114. }