util.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. export function accDiv(arg1, arg2) {
  45. if(!arg1 || !arg2){
  46. if(arg2 == 0){
  47. return Infinity
  48. }
  49. return arg1/arg2
  50. }
  51. var t1 = 0, t2 = 0, r1, r2;
  52. try { t1 = arg1.toString().split(".")[1].length } catch (e) { }
  53. try { t2 = arg2.toString().split(".")[1].length } catch (e) { }
  54. r1 = Number(arg1.toString().replace(".", ""));
  55. r2 = Number(arg2.toString().replace(".", ""));
  56. if(r2==0){
  57. return Infinity;
  58. }else{
  59. return (r1 / r2) * Math.pow(10, t2 - t1);
  60. }
  61. }
  62. export function numberFormat(number, decimals = 2, dec_point = '.', thousands_sep = ',') {
  63. /*
  64. * 参数说明:
  65. * number:要格式化的数字
  66. * decimals:保留几位小数
  67. * dec_point:小数点符号
  68. * thousands_sep:千分位符号
  69. * */
  70. number = accDiv(number,100)
  71. number = (number + '').replace(/[^0-9+-Ee.]/g, '');
  72. var n = !isFinite(+number) ? 0 : +number,
  73. prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
  74. sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
  75. dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
  76. s = '',
  77. toFixedFix = function (n, prec) {
  78. var k = Math.pow(10, prec);
  79. return '' + Math.round(n * k) / k;
  80. };
  81. s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
  82. var re = /(-?\d+)(\d{3})/;
  83. while (re.test(s[0])) {
  84. s[0] = s[0].replace(re, "$1" + sep + "$2");
  85. }
  86. if ((s[1] || '').length < prec) {
  87. s[1] = s[1] || '';
  88. s[1] += new Array(prec - s[1].length + 1).join('0');
  89. }
  90. return s.join(dec);
  91. }