phpjs
Usuario (Argentina)
Amigos, Les paso el código en javascript de la función un poco más simplificada que recomiendo que pasé de VB a javascript de un viejo código de la revista PCUsers: Espero que me voten!! function validaCuit(sCUIT) { var aMult = '6789456789'; var aMult = aMult.split(''); var sCUIT = String(sCUIT); var iResult = 0; var aCUIT = sCUIT.split(''); if (aCUIT.length == 11) { // La suma de los productos for(var i = 0; i <= 9; i++) { iResult += aCUIT * aMult; } // El módulo de 11 iResult = (iResult % 11); // Se compara el resultado con el dígito verificador return (iResult == aCUIT[10]); } return false; } Hice otra versión basada en este post: function validaCuit(sCUIT) { var aMult = '5432765432'; var aMult = aMult.split(''); if (sCUIT && sCUIT.length == 11) { aCUIT = sCUIT.split(''); var iResult = 0; for(i = 0; i <= 9; i++) { iResult += aCUIT * aMult; } iResult = (iResult % 11); iResult = 11 - iResult; if (iResult == 11) iResult = 0; if (iResult == 10) iResult = 9; if (iResult == aCUIT[10]) { return true; } } return false; } Actualización Sept 2012: En esta edición corregí un error en la función basada en este mismo post donde decia "< 9" tenia que decir "<= 9" Saludos y espero que me voten!! Matias
Bueno, acá les dejo otro aporte, pasó un año pero más vale tarde que nunca. Recuerden que en javascript los meses van desde el 0 hasta el 11, siendo 0 enero y 11 diciembre. /** * Devuelve la diferencia en dias entre dos fechas * Se esperan fechas con formato: * d/m/aaaa hh:mm:ss:ms * puede ser: * mes/anio, d/m/aaaa, d/m/aaaa hh, d/m/aaaa hh:mm, d/m/aaaa hh:mm:ss, d/m/aaaa hh:mm:ss:ms * Si el dia no es provisto se utiliza "1" para el mismo. * * @author Matias Perrone - Global Innovation - http://www.globalinnovation.com.ar * @param string fecha1 La fecha hasta * @param string fecha2 La fecha desde * @returns int */ function dateTimeDiff(fecha1, fecha2) { var vecFecha1, vecFecha2, diff; // Si no son válidas if(fecha1.length <= 0 || fecha2.length <= 0) return 0; // Array con la fecha vecFechaHora1 = fecha1.split(' '); vecFechaHora2 = fecha2.split(' '); vecFecha1 = vecFechaHora1[0].split('/'); vecFecha2 = vecFechaHora2[0].split('/'); if (vecFechaHora1.length > 1) vecHora1 = vecFechaHora1[1].split(':'); else vecHora1 = new Array(); if (vecFechaHora2.length > 1) vecHora2 = vecFechaHora2[1].split(':'); else vecHora2 = new Array(); if (vecFecha1.length >= 2) { if (vecFecha1.length == 2) date1 = Date.UTC(vecFecha1[0], (vecFecha1[1] - 1), 1); else if (vecHora1.length == 0 && vecFecha1.length == 3) date1 = Date.UTC(vecFecha1[2], (vecFecha1[1] - 1), vecFecha1[0]); else if (vecHora1.length == 1 && vecFecha1.length == 3) date1 = Date.UTC(vecFecha1[2], (vecFecha1[1] - 1), vecFecha1[0], vecHora1[0]); else if (vecHora1.length == 2 && vecFecha1.length == 3) date1 = Date.UTC(vecFecha1[2], (vecFecha1[1] - 1), vecFecha1[0], vecHora1[0], vecHora1[1]); else if (vecHora1.length == 3 && vecFecha1.length == 3) date1 = Date.UTC(vecFecha1[2], (vecFecha1[1] - 1), vecFecha1[0], vecHora1[0], vecHora1[1], vecHora1[2]); else if (vecHora1.length == 4 && vecFecha1.length == 3) date1 = Date.UTC(vecFecha1[2], (vecFecha1[1] - 1), vecFecha1[0], vecHora1[0], vecHora1[1], vecHora1[2], vecHora1[3]); else return 0; //////////////////////////////////////////////////////////////////////////////////////////////////////////// if (vecFecha2.length == 2) date2 = Date.UTC(vecFecha2[0], (vecFecha2[1] - 1)); else if (vecHora2.length == 0 && vecFecha2.length == 3) date2 = Date.UTC(vecFecha2[2], (vecFecha2[1] - 1), vecFecha2[0]); else if (vecHora2.length == 1 && vecFecha2.length == 3) date2 = Date.UTC(vecFecha2[2], (vecFecha2[1] - 1), vecFecha2[0], vecHora2[0]); else if (vecHora2.length == 2 && vecFecha2.length == 3) date2 = Date.UTC(vecFecha2[2], (vecFecha2[1] - 1), vecFecha2[0], vecHora2[0], vecHora2[1]); else if (vecHora2.length == 3 && vecFecha2.length == 3) date2 = Date.UTC(vecFecha2[2], (vecFecha2[1] - 1), vecFecha2[0], vecHora2[0], vecHora2[1], vecHora2[2]); else if (vecHora2.length == 4 && vecFecha2.length == 3) date2 = Date.UTC(vecFecha2[2], (vecFecha2[1] - 1), vecFecha2[0], vecHora2[0], vecHora2[1], vecHora2[2], vecHora2[3]); else return 0; } else return 0; // Los meses van del 0 al 11 en JavaScript // new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] ) // getTime() devuelve la cantidad de milisegundos // desde 1 de Enero de 1970. diff = date1 - date2; // 86400000 es la cantidad de milisegundos en un dia if (!isNaN(diff)) return (diff/86400000 * -1); else return 0; }
A tono con la onda del último post "Diferencia en dias entre dos fechas" pensé en dejarles esta otra función que a mi me sirvió un montón y es a prueba de balas, es decir, esta recontra probada en varios sistemas internos y webs de empresas que usan esto diariamente: /** * Devuelve un objeto con atributos days, months, years (sólo si * bIncludeYears es verdadero), from, until o falso si la fechas no * son válidas * [email protected]://www.globalinnovation.com.ar [email protected] [email protected]echa desde [email protected]fecha hasta [email protected] El formato de las fechas. default: dd/mm/yyyy [email protected] Separador opcional. default: / [email protected] Calcula los años y los resta de los meses [email protected] Muestra por consola, en los navegadores que la soporten, datos de debug. Default: false [email protected]"days", "months", "years" (if bIncludeYears is true), "from" and "until" as attributes */ function dateDiff2(sFechaDesde, sFechaHasta, sFormato, sSeparator, bIncludeYears, bDebug) { bIncludeYears = (bIncludeYears ? true : false); sSeparator = (sSeparator ? sSeparator : '/'); bDebug = ((bDebug ? true : false) ? (console ? true : false) : false); var aFecha1, aFecha2, diff; var oFormato = eval('({"dd": 0,"mm": 1,"yyyy": 2})'); if (bIncludeYears) var oReturn = eval('({"days": 0, "months": 0, "years": 0, "from":"' + sFechaDesde + '", "until":"' + sFechaHasta + '"})'); else var oReturn = eval('({"days": 0, "months": 0 , "from":"' + sFechaDesde + '", "until":"' + sFechaHasta + '"})'); // Formato if (!sFormato) { sFormato = 'dd/mm/yyyy'; } else { var aFormato = sFormato.split(sSeparator); for(iPos in aFormato) { eval('oFormato.' + aFormato + ' = ' + String(iPos)); iPos++; } } if (bDebug) console.log('Formato: ' + sFormato, aFormato, oFormato); // Validez if (!ValidarFecha(sFechaHasta, sFormato) || !ValidarFecha(sFechaDesde, sFormato)) { if (bDebug) console.log('Fecha(s) no válida(s): ' + sFechaHasta + ' al ' + sFechaDesde); return false; } // Date validity var aFechaDesde = sFechaDesde.split('/'); var iDesdeDD = parseInt(aFechaDesde[oFormato.dd ], 10); var iDesdeMM = parseInt(aFechaDesde[oFormato.mm ], 10); var iDesdeYY = parseInt(aFechaDesde[oFormato.yyyy], 10); if (bDebug) console.log('Fecha Desde - Array - DD MM YYYY: ', aFechaDesde, iDesdeDD, iDesdeMM, iDesdeYY); var aFechaHasta = sFechaHasta.split('/'); var iHastaDD = parseInt(aFechaHasta[oFormato.dd ], 10); var iHastaMM = parseInt(aFechaHasta[oFormato.mm ], 10); var iHastaYY = parseInt(aFechaHasta[oFormato.yyyy], 10); if (bDebug) console.log('Fecha Hasta - Array - DD MM YYYY: ', aFechaHasta, iHastaDD, iHastaMM, iHastaYY); // mismo año y mes if (iDesdeYY == iHastaYY && iDesdeMM == iHastaMM) { oReturn.months = 0; if (bDebug) console.log('mismo año y mismo mes'); } // mismo año y distinto mes else if (iDesdeYY == iHastaYY && iDesdeMM != iHastaMM) { oReturn.months = (iHastaMM - iDesdeMM); if (bDebug) console.log('mismo año y distinto mes'); } // distinto año else { // Meses de diferencia por años oReturn.months = ((iHastaYY - iDesdeYY) * 12); // Meses de diferencia en el año coincidente if (iHastaMM > iDesdeMM) oReturn.months += (iHastaMM - iDesdeMM); else oReturn.months += (iHastaMM + (12 - iDesdeMM) - 12); if (bDebug) console.log('distinto año'); } // Años if (bIncludeYears) { if (bDebug) console.log('Calcula los años'); oReturn.years = Math.floor(oReturn.months / 12); oReturn.months -= oReturn.years * 12; } // Dias de diferencia // hasta es mayor o igual if (iHastaDD >= iDesdeDD) { oReturn.days = iHastaDD - iDesdeDD; if (bDebug) console.log('Dias de diferencia -> Dia hasta es mayor o igual'); } // hasta es menor else { if (oReturn.months) oReturn.months--; var dd = new Date(iHastaYY, (iHastaMM - 1), 0); // El mes empieza en 0 var iDiasMesAnterior = dd.getDate(); oReturn.days = iHastaDD + iDiasMesAnterior - iDesdeDD; if (bDebug) console.log('iHastaDD + iDiasMesAnterior - iDesdeDD: ', iHastaDD, iDiasMesAnterior, iDesdeDD); if (bDebug) console.log('Dias de diferencia -> Dia hasta es menor, se restan meses'); } if (bDebug) console.log('Se retorna: ', oReturn); return oReturn; }