//====================================== //Nome: GenJsValidateDate //Linguagem: JavaScript //Descrição: Essa função recebe uma data e a valida respeitando os parâmetros passados // //Autor: Equipe Biblioteca Marlin // //Data: 12/06/2002 // //Parâmetros de entrada: // - pStrFormattedR => Data de retorno no formato YYYYMMDD // - pStrToValidate => Data a ser validada // - pIntDateFormat => Formato de estruturação da data // 1 - dd/mm/aaaa // 2 - mm/dd/aaaa // - pStrDelimiter => Separador de dia, mês e ano // - pStrMinDate => A data não pode ser mais antiga que esse parâmetro // - pStrMaxDate => A data não pode ser mais recente que esse parâmetro // - pIntOptional => Se a data é opcional ou obrigatória // 0 - obrigatória // 1 - opcional // - //Retorno: Código de erro // //Informações adicionais: // + Funções: // - GenJsStrPadding(pStrFormattedR, pStrToPad, pStrPad, pIntTam, pIntSideToPad) // - FncJsVerifyIntParameter(pParam, pIntDefValue) // - // + Includes: // - // + Objetos: // - // + Stored Procedures: // - //Historico Alteracao: // - 12/06/2002 Thyago Consort // - //====================================== function GenJsValidateDate(pStrFormattedR, pStrToValidate, pIntDateFormat, pStrDelimiter, pStrMinDate, pStrMaxDate, pIntOptional) { var lStrFormatted = ''; var lLngDay = 0; var lLngMonth = 0; var lLngYear = 0; var lIntIndDay; var lIntIndMonth; var lIntIndYear; var lIntMaxDay = 0; var lReDtPattern; var lStrAux = new Array; var lArrDate = new Array; var p = new Array; lStrFormatted = pStrToValidate; pStrFormattedR[0] = ''; //Verificando parâmetros de entrada e valores default p[0] = pIntDateFormat; if (!FncJsVerifyIntParameter(p,1)) { return -11; } pIntDateFormat = p[0]; p[0] = pIntOptional; if (!FncJsVerifyIntParameter(p,1)) return -11; pIntOptional = p[0]; if ( (pStrDelimiter == null) || (pStrDelimiter == '') ) pStrDelimiter = '/'; if (pStrMinDate == null) pStrMinDate = ''; if (pStrMaxDate == null) pStrMaxDate = ''; //Se vazio e obrigatório, ERRO, senão não há o que validar if (lStrFormatted.length == 0) { if (pIntOptional == 0) return -220; return 0; } //Testa o formato da string lReDtPattern = new RegExp("^\\d{1,2}" + pStrDelimiter + "\\d{1,2}" + pStrDelimiter + "\\d{4}" + "$"); if (!lReDtPattern.test(lStrFormatted)) { return -221; } //Verifica dia, mes, ano de acordo com o formato lArrDate = lStrFormatted.split(pStrDelimiter); switch(pIntDateFormat){ case 1: //dd/mm/yyyy lIntIndDay = 0; lIntIndMonth = 1; lIntIndYear = 2; break; case 2: //mm/dd/yyyy lIntIndDay = 1; lIntIndMonth = 0; lIntIndYear = 2; break; default: return -11; } //Converte dia, mês, ano de acordo com formato lLngDay = parseInt(lArrDate[lIntIndDay],10); lLngMonth = parseInt(lArrDate[lIntIndMonth],10); lLngYear = parseInt(lArrDate[lIntIndYear],10); //Calcula limite do dia lIntMaxDay = 31; switch(lLngMonth){ case 2: lIntMaxDay = 28; if (lLngYear/4 == Math.round(lLngYear/4)) lIntMaxDay = 29; break; case 4: case 6: case 9: case 11: lIntMaxDay = 30; break; } //Verificando validade do conteudo da data if (lLngYear < 1) return -221; if ((lLngMonth < 1) || (lLngMonth > 12)) return -221; if ((lLngDay < 1) || (lLngDay > lIntMaxDay)) return -221; //Montando data de retorno no formato YYYYMMDD GenJsStrPadding(lStrAux,lArrDate[lIntIndYear],'0',4,0); lStrFormatted = lStrAux[0]; GenJsStrPadding(lStrAux,lArrDate[lIntIndMonth],'0',2,0); lStrFormatted = lStrFormatted + lStrAux[0]; GenJsStrPadding(lStrAux,lArrDate[lIntIndDay],'0',2,0); lStrFormatted = lStrFormatted + lStrAux[0]; //Formato OK => atualizar o valor do retorno pStrFormattedR[0] = lStrFormatted; //Verificando se a data é maior que a data mínima e menor que a máxima if (pStrMinDate != '') if (pStrFormattedR < pStrMinDate) return -222; if (pStrMaxDate != '') if (pStrFormattedR > pStrMaxDate) return -223; return 0; }