util.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. function formatTime(time) {
  2. if (typeof time !== 'number' || time < 0) {
  3. return time
  4. }
  5. var hour = parseInt(time / 3600)
  6. time = time % 3600
  7. var minute = parseInt(time / 60)
  8. time = time % 60
  9. var second = time
  10. return ([hour, minute, second]).map(function(n) {
  11. n = n.toString()
  12. return n[1] ? n : '0' + n
  13. }).join(':')
  14. }
  15. function formatLocation(longitude, latitude) {
  16. if (typeof longitude === 'string' && typeof latitude === 'string') {
  17. longitude = parseFloat(longitude)
  18. latitude = parseFloat(latitude)
  19. }
  20. longitude = longitude.toFixed(2)
  21. latitude = latitude.toFixed(2)
  22. return {
  23. longitude: longitude.toString().split('.'),
  24. latitude: latitude.toString().split('.')
  25. }
  26. }
  27. var dateUtils = {
  28. UNITS: {
  29. '年': 31557600000,
  30. '月': 2629800000,
  31. '天': 86400000,
  32. '小时': 3600000,
  33. '分钟': 60000,
  34. '秒': 1000
  35. },
  36. humanize: function(milliseconds) {
  37. var humanize = '';
  38. for (var key in this.UNITS) {
  39. if (milliseconds >= this.UNITS[key]) {
  40. humanize = Math.floor(milliseconds / this.UNITS[key]) + key + '前';
  41. break;
  42. }
  43. }
  44. return humanize || '刚刚';
  45. },
  46. format: function(dateStr) {
  47. var date = this.parse(dateStr)
  48. var diff = Date.now() - date.getTime();
  49. if (diff < this.UNITS['天']) {
  50. return this.humanize(diff);
  51. }
  52. var _format = function(number) {
  53. return (number < 10 ? ('0' + number) : number);
  54. };
  55. return date.getFullYear() + '/' + _format(date.getMonth() + 1) + '/' + _format(date.getDay()) + '-' +
  56. _format(date.getHours()) + ':' + _format(date.getMinutes());
  57. },
  58. parse: function(str) { //将"yyyy-mm-dd HH:MM:ss"格式的字符串,转化为一个Date对象
  59. var a = str.split(/[^0-9]/);
  60. return new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]);
  61. }
  62. };
  63. // 回显数据字典
  64. const selectDictLabel = (datas, value) => {
  65. var actions = [];
  66. Object.keys(datas).some((key) => {
  67. if (datas[key].value == ('' + value)) {
  68. actions.push(datas[key].label);
  69. return true;
  70. }
  71. })
  72. return actions.join('');
  73. }
  74. /**
  75. * 乘法函数,用来得到精确的乘法结果
  76. * @param {Object} arg1
  77. * @param {Object} arg2
  78. */
  79. const accMul = (arg1, arg2) => {
  80. var m = 0;
  81. m += deal(arg1);
  82. m += deal(arg2);
  83. var r1 = Number(arg1.toString().replace('.', ''));
  84. var r2 = Number(arg2.toString().replace('.', ''));
  85. return (r1 * r2) / Math.pow(10, m);
  86. }
  87. /**
  88. * 加法函数,用来得到精确的加法结果
  89. * @param {Object} arg1
  90. * @param {Object} arg2
  91. */
  92. const accAdd = (arg1, arg2) => {
  93. var r1 = deal(arg1);
  94. var r2 = deal(arg2);
  95. var m = Math.pow(10, Math.max(r1, r2));
  96. return (arg1 * m + arg2 * m) / m;
  97. }
  98. /**
  99. * 除法函数,用来得到精确的除法结果
  100. * @param {Object} arg1
  101. * @param {Object} arg2
  102. */
  103. const accDiv = (arg1, arg2) => {
  104. var t1 = deal(arg1);
  105. var t2 = deal(arg2);
  106. var r1 = Number(arg1.toString().replace(".", ""))
  107. var r2 = Number(arg2.toString().replace(".", ""))
  108. return (r1 / r2) * Math.pow(10, t2 - t1);
  109. }
  110. /**
  111. * 求小数点后的数据长度
  112. */
  113. const deal = (arg) => {
  114. var t = 0;
  115. try {
  116. t = arg.toString().split('.')[1].length;
  117. } catch (e) {}
  118. return t;
  119. }
  120. /**
  121. * 时间加上多少分
  122. */
  123. const dateTo = (date, minute) => {
  124. let time = new Date(date);
  125. time.setMinutes(time.getMinutes() + minute, time.getSeconds(), 0);
  126. return format(time);
  127. }
  128. /**
  129. * 判断 有效日期不能小于今天
  130. */
  131. const dateCompare = (beginDate, endDate) => {
  132. var beginArrayDate = beginDate.split('-');
  133. var endArrayDate = endDate.split('-')
  134. if (parseInt(endArrayDate[0], 10) > parseInt(beginArrayDate[0], 10)) return true;
  135. if (parseInt(endArrayDate[0], 10) == parseInt(beginArrayDate[0], 10)) {
  136. if (parseInt(endArrayDate[1], 10) > parseInt(beginArrayDate[1], 10)) return true;
  137. else {
  138. if (parseInt(endArrayDate[1], 10) == parseInt(beginArrayDate[1], 10)) {
  139. if (parseInt(endArrayDate[2], 10) >= parseInt(beginArrayDate[2], 10)) return true;
  140. }
  141. }
  142. }
  143. return false;
  144. }
  145. /**
  146. * 获取日期
  147. * day 获取日期
  148. * time 获取时间
  149. */
  150. const getDate = (obj = 'day') => {
  151. const date = new Date();
  152. let year = date.getFullYear();
  153. let month = date.getMonth() + 1;
  154. let day = date.getDate();
  155. let Hours = date.getHours();
  156. let Minutes = date.getMinutes();
  157. month = month > 9 ? month : '0' + month;
  158. day = day > 9 ? day : '0' + day;
  159. Hours = Hours > 9 ? Hours : '0' + Hours;
  160. Minutes = Minutes > 9 ? Minutes : '0' + Minutes;
  161. if (obj == 'day') {
  162. return `${year}-${month}-${day}`;
  163. }
  164. if (obj == 'time') {
  165. return `${year}-${month}-${day}` + ' ' + Hours + ':' + Minutes;
  166. }
  167. }
  168. /**
  169. * 格式化时间
  170. */
  171. const format = (obj) => {
  172. const date = new Date(obj);
  173. let year = date.getFullYear();
  174. let month = date.getMonth() + 1;
  175. let day = date.getDate();
  176. let Hours = date.getHours();
  177. let Minutes = date.getMinutes();
  178. month = month > 9 ? month : '0' + month;
  179. day = day > 9 ? day : '0' + day;
  180. Hours = Hours > 9 ? Hours : '0' + Hours;
  181. Minutes = Minutes > 9 ? Minutes : '0' + Minutes;
  182. return `${year}-${month}-${day}` + ' ' + Hours + ':' + Minutes;
  183. }
  184. function convertToChinaNum(num) {
  185. var arr1 = new Array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九');
  186. var arr2 = new Array('', '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千', '万', '十', '百', '千',
  187. '亿'); //可继续追加更高位转换值
  188. if (!num || isNaN(num)) {
  189. return "零";
  190. }
  191. var english = num.toString().split("")
  192. var result = "";
  193. for (var i = 0; i < english.length; i++) {
  194. var des_i = english.length - 1 - i; //倒序排列设值
  195. result = arr2[i] + result;
  196. var arr1_index = english[des_i];
  197. result = arr1[arr1_index] + result;
  198. }
  199. //将【零千、零百】换成【零】 【十零】换成【十】
  200. result = result.replace(/零(千|百|十)/g, '零').replace(/十零/g, '十');
  201. //合并中间多个零为一个零
  202. result = result.replace(/零+/g, '零');
  203. //将【零亿】换成【亿】【零万】换成【万】
  204. result = result.replace(/零亿/g, '亿').replace(/零万/g, '万');
  205. //将【亿万】换成【亿】
  206. result = result.replace(/亿万/g, '亿');
  207. //移除末尾的零
  208. result = result.replace(/零+$/, '')
  209. //将【零一十】换成【零十】
  210. //result = result.replace(/零一十/g, '零十');//貌似正规读法是零一十
  211. //将【一十】换成【十】
  212. result = result.replace(/^一十/g, '十');
  213. return result;
  214. }
  215. module.exports = {
  216. formatTime: formatTime,
  217. formatLocation: formatLocation,
  218. dateUtils: dateUtils,
  219. selectDictLabel: selectDictLabel,
  220. accMul: accMul,
  221. accAdd: accAdd,
  222. accDiv: accDiv,
  223. dateCompare: dateCompare,
  224. getDate: getDate,
  225. dateTo: dateTo,
  226. cn: convertToChinaNum,
  227. }