class Data{ /** * Formata data em formato mysql para PtBr * ex: * antes: 12/12/2013 ou 12/12/2019 23:59:58 * depois: 2013-12-12 ou 2013-12-12 23:59:58 */ static getFormattedAsDateToMysql(data, timestamp){ // Exibe timestamp ou no timestamp = timestamp || false; if(data != '' && data != undefined){ // Verifica se ja est no formato correto if(!(data.substr(4,1) == '-' && data.substr(7,1) == '-')){ var horario = ''; if(timestamp && data.length == 19) horario = data.substr(11,8); var dia = data.substr(0,2); var mes = data.substr(3,2); var ano = data.substr(6,4); return ano + "-" + mes + "-" + dia + (horario ? " " + horario : ""); }else{ return data; } }else{ return ''; } } /** * Formata data em formato mysql para PtBr * ex: * antes: 2013-12-12 ou 2013-12-12 23:59:58 * depois: 12/12/2013 ou 12/12/2013 23:59:58 */ static getFormattedAsDateToPtBr(data, timestamp){ // Exibe timestamp ou no timestamp = timestamp || false; if(data != '' && data != undefined){ // Verifica se ja est no formato correto if(!(data.substr(2,1) == '/' && data.substr(5,1) == '/')){ var horario = ''; if(timestamp && data.length == 19) horario = data.substr(11,8); var dia = data.substr(8,2); var mes = data.substr(5,2); var ano = data.substr(0,4); return dia + "/" + mes + "/" + ano + (horario ? " " + horario : ""); }else{ return data; } }else{ return ''; } } /** * Formata nmeros * * @param str valor Nmero a ser formatado (deve ser String para ser formatado) * @param str formatoEntrada Linguagem do valor informado (mysql, en_us, local) * @param str formatoSaida Linguagem que o valor deve ser formatado (mysql, en_us, local) * @param int precisao Nmeros decimais a serem exibidos * @param bool zeroFill Filtro de zeros * @param bool exibeSeparadorMilhar Exibe separador na casa milhar de acordo com a sada * @param bool convUndefToZero Caso true, converte undefined para zero * * @return str */ static getFormattedAsNumber(valor, formatoEntrada, formatoSaida, precisao, zeroFill, exibeSeparadorMilhar, convUndefToZero){ var self = this; var formatos = ['mysql', 'en_us', 'local', 'pt_br']; if(!formatos.includes(formatoEntrada)) throw 'Parametro "formatoEntrada" invalido "' + formatoEntrada + '"\n' + new Error().stack; if(!formatos.includes(formatoSaida)) throw 'Parametro "formatoSaida" invalido "' + formatoSaida + '"\n' + new Error().stack; // NÃO IMPLEMENTADO TRATAMENTO (ESTILO BRAVO ERP CLASSICO) var conf_regional = 'pt_br'; var confnumerica_precisao = Machine_Env_Company.getCasasDecimais(); var confnumerica_zerofill_qtdes = 'N'; if((valor == undefined || valor == '') && (convUndefToZero == true)) valor = 0; if(typeof(valor) != 'string' && valor != undefined){ valor = valor.toString(); valor = $.trim(valor); } if(valor != undefined && valor != ''){ /* -------------------------- DEFINE PADRES -------------------------- */ // Formato de entrada desconhecido if(formatoEntrada == ''){ var buscaVirgula = valor.indexOf(","); var buscaPonto = valor.indexOf('.'); // Tem Ponto e virgula if(buscaVirgula != -1 && buscaPonto != -1){ if(buscaVirgula < buscaPonto) formatoEntrada = 'en_us'; else formatoEntrada = 'pt_br'; }else if(buscaVirgula < buscaPonto){ formatoEntrada = 'en_us'; }else if(buscaPonto < buscaVirgula) formatoEntrada = 'pt_br'; // Nem ponto, nem virgula else formatoEntrada = 'en_us'; // Formato de entrada LOCAL (conf regional) }else if(formatoEntrada == 'local') formatoEntrada = conf_regional; if(formatoSaida == 'local') formatoSaida = conf_regional; if(precisao === '' || precisao === undefined) precisao = confnumerica_precisao; if(zeroFill === ''|| zeroFill === undefined) zeroFill = confnumerica_zerofill_qtdes; /* -------------------------- Valida numeros negativos -------------------------- */ var flagNegativo = false; if(valor.substr(0,1) == '-'){ valor = valor.substr(1) flagNegativo = true; } /* --------------------------------------------- Formata qualquer tipo de entrada para EN_US --------------------------------------------- */ // Entrada EN_US ou MYSQL if(formatoEntrada == 'en_us' || formatoEntrada == 'mysql'){ var valorEntrada = valor.replace(',', ''); // Entrada PT_BR }else if(formatoEntrada == 'pt_br'){ valor = valor.replace(/\./g,''); // Remove pontos valor = valor.replace(',','.'); var valorEntrada = valor; } // IMPORTANTE: verificar se o valor de entrada numerico, evitando valores como: 123abc if($.isNumeric(valorEntrada)){ var arrValorSaida; var sepMil; var sepDec; /* ------------------------------ FORMATA SADA ------------------------------ */ valorEntrada = parseFloat(valorEntrada); // valorSaida = valorEntrada.toFixed(precisao); valorSaida = self.getRoundedLikePhp(valorEntrada, precisao); // Saida EN_US if(formatoSaida == 'en_us'){ arrValorSaida = valorSaida.split('.'); if((exibeSeparadorMilhar == '') || (exibeSeparadorMilhar == undefined) || (exibeSeparadorMilhar == true)) sepMil = ','; else sepMil = ''; sepDec = '.'; // Saida PR_BR }else if(formatoSaida == 'pt_br'){ valorSaida = valorSaida.toString().replace('.', ','); arrValorSaida = valorSaida.split(','); if((exibeSeparadorMilhar === '') || (exibeSeparadorMilhar === undefined) || (exibeSeparadorMilhar === true)) sepMil = '.'; else sepMil = ''; sepDec = ','; // Saida MYSQL (sem separador de milhares) }else if(formatoSaida == 'mysql'){ arrValorSaida = valorSaida.split('.'); sepDec = '.'; sepMil = ''; } // Insere separadores de milhares var valorMilharesInverso = ''; var countCrescente = 1; // Inverte valores for(var i = arrValorSaida[0].length-1; i >= 0; i--){ valorMilharesInverso += arrValorSaida[0].charAt(i); //Atribui separador de milhar if(countCrescente%3 == 0 && countCrescente < arrValorSaida[0].length) valorMilharesInverso += sepMil; countCrescente++; } // Inverte valores (corrigir) var valorMilhares = ''; for(var i = valorMilharesInverso.length-1; i >= 0; i--){ valorMilhares += valorMilharesInverso.charAt(i); } // Resultado Decimal if(arrValorSaida[1] !== undefined) var valorSaida = valorMilhares + sepDec + arrValorSaida[1]; // Resultado Inteiro else var valorSaida = valorMilhares; // Se filtrar os Zeros if(zeroFill == 'S'){ if(arrValorSaida[1] == 0) var valorSaida = valorMilhares; } if(formatoSaida == 'mysql' || formatoSaida == 'en_us') valorSaida = parseFloat(valorSaida); if(flagNegativo){ if(formatoSaida == 'mysql' || formatoSaida == 'en_us') valorSaida = Math.abs(valorSaida) * -1; else valorSaida = '-' + valorSaida; } }else{ valorSaida = valorEntrada; } /* ------------------- RETORNO ------------------- */ return valorSaida; } } /** * Efetua arrdondamento da mesma forma que o number_format do PHP, evitando diferena de calculo em tela * @param number * @param decimals * @returns */ static getRoundedLikePhp(number, decimals) { if(decimals > 0){ /** * FUNÇÃO ANTIGA QUE NÃO ESTAVA SE COMPORTANDO CORRETAMENTE * var d = parseInt(decimals,10); var dx = Math.pow(10,d); var n = parseFloat(number); var f = Math.round(Math.round(n * dx * 10) / 10) / dx; var s = f.toFixed(d); /** * NOVA FUNÇÃO */ function pad (str, max) { return str.length < max ? pad("0" + str, max) : str; } var d = parseInt(decimals,10); var dx = Math.pow(10,d); var n = parseFloat(number + 0.00001); var f = ""+Math.round(n*dx); var p = pad(f, decimals + 1); var r = parseFloat(p.slice(0,-1*d) + "." + p.slice(-1*d)); var s = r.toFixed(d).toString(); return s; }else if(decimals == 0){ return Math.round(number); } } }