UNPKG

xza

Version:
134 lines (129 loc) 3.53 kB
const _ = require('lodash-core') const sizeof = require('object-sizeof') const prettyBytes = require('pretty-bytes') const moment = require('moment-mini') const calc = require('./calc') const Big = require('big.js') const utility = { sizeof: function (obj) { return prettyBytes(sizeof(obj)) }, strToNumber: function (str, returnValue = 0 / 0) { var num, repObj str = utility.toHalfString(str) repObj = { '^[△▲Δ]': '-', '[,、銭%%]': '', '[円]': '.' } str = utility.replaceAll(str, repObj) num = Number( str .split(',') .join('') .trim() ) if (_.isNaN(num)) { return returnValue } else { return num } }, replaceAll: function (str, obj) { var key, ret, val ret = str for (key in obj) { val = obj[key] ret = ret.replace(new RegExp(key, 'g'), val) } return ret }, toHalfString: function (str) { return str.replace(/[0-9a-zA-Z]/g, function (s) { return String.fromCharCode(s.charCodeAt(0) - 0xfee0) }) }, whiteSpaceRemover: function (str) { return str.replace(/[\s]/g, '') }, toDateString: function (obj, format) { let _era let _eras let _match let _obj = obj const _format = format || 'YYYY-MM-DD' if (_.isString(obj)) { _obj = utility.whiteSpaceRemover(obj) _obj = utility.toHalfString(_obj) if ((_match = _obj.match(/(.*)[年-](\d*)[月-](\d*)日?/))) { let [, _year, _month, _day] = _match if (_month.length === 1) { _month = `0${_month}` } if (_day.length === 1) { _day = `0${_day}` } // eslint-disable-next-line no-control-regex if ((_eras = _year.match(/([^\x01-\x7E\uFF61-\uFF9F]{2})(\d*)/))) { ;[, _era, _year] = _eras switch (_era) { case '令和': if (/令和\s?元/.test(_eras.input)) { _year = 2019 } else { _year = Number(_year) + 2018 } break case '平成': _year = Number(_year) + 1988 break case '昭和': _year = Number(_year) + 1925 break case '大正': _year = Number(_year) + 1911 break } } _obj = `${_year}-${_month}-${_day}` } } return moment(_obj).format(_format) }, splitUppercase: function (str, type = 0) { str = utility.whiteSpaceRemover(str) if (type) { str = str.replace(/([A-Z])/g, '___$1') str = str.replace(/^___/g, '') return str.split('___') } else { str = str.replace(/([a-z0-9])([A-Z])/g, '$1___$2') return str.split('___') } }, setTimeout: function (delay, fn, ...params) { if (typeof delay === 'function') { params.unshift(0) params.unshift(delay) } else { params.unshift(delay) params.unshift(fn) } return setTimeout.apply(null, params) }, includesString: function (str, searchString) { return new RegExp(searchString, 'i').test(str) }, sma: (values, range, roundNumber) => { roundNumber = roundNumber || 2 return values.map((v, i, arr) => { if (i < range - 1) { return null } else { const refArray = arr.slice(i - range + 1, i + 1) return parseFloat(Big(calc.mean(refArray)).round(roundNumber)) } }) } } module.exports = utility