Escribe aquí el texto
// Librería fechas /* Para funcionar, esta librería necesita la siguiente estructura: struct _fecha { char dia:5; char mes:4; int any; }; */ int bisiesto(int any) { // Finalidad: Calcula si un año es bisiesto // Argumentos: Se le pasará un año (int). No será necesario enviarle una fecha entera // Devuelve: 1 si es bisiesto, 0 si no lo es if (any%400 == 0 || (any%4==0 && any%100!=0)) return 1; else return 0; } int dias_mes(struct _fecha fecha) { // Finalidad: Calcula los días de un mes // Argumentos: Se le pasará una fecha (struct _fecha). // Devuelve: Los días del mes de la fecha pasada (int). switch (fecha.mes) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; break; case 4: case 6: case 9: case 11: return 30; break; case 2: if (bisiesto(fecha.any)) return 29; else return 28; } } int validarFecha(struct _fecha fecha) { // Finalidad: Determina si la fecha pasada existe // Argumentos: Se le pasará una fecha (struct _fecha). // Devuelve: 1 si la fecha es válida, 0 si no lo es. if (fecha.mes>0 && fecha.mes<=12) { if (fecha.dia>0 && fecha.dia<=dias_mes(fecha)) return 1; else return 0; } else return 0; } int cuenta_dias(struct _fecha fecha1, struct _fecha fecha2) { // Finalidad: Calcular los días que hay entre dos fechas. // Argumentos: Se le pasará dos fechas (struct _fecha). // Devuelve: La distancia en días entre las dos fechas (int) // Nota: fecha1 deberá ser anterior a fecha2 int acum=0, sw=0; while (1) { if (fecha1.any == fecha2.any && fecha1.mes == fecha2.mes) break; acum=acum+(dias_mes(fecha1)-fecha1.dia); if(fecha1.mes==12) { fecha1.mes=1; fecha1.any++; } else fecha1.mes++; fecha1.dia=0; } acum=acum+(fecha2.dia-fecha1.dia); return acum; } struct _fecha sumarDias(struct _fecha fecha, int x) { // Finalidad: Suma a una fecha inicial una cantidad de días. // Argumentos: Una fecha (struct _fecha) y una cantidad de días (int). // Devuelve: La fecha final con los días sumados (struct _fecha). for(;x>0;x--) { if(fecha.dia<dias_mes(fecha) ) fecha.dia++; else { if (fecha.mes==12) { fecha.mes=1; fecha.any++; } else fecha.mes++; fecha.dia=1; } } return fecha; } struct _fecha restarDias(struct _fecha fecha, int x) { // Finalidad: Resta a una fecha inicial una cantidad de días. // Argumentos: Una fecha (struct _fecha) y una cantidad de días (int). // Devuelve: La fecha final con los días restados (struct _fecha). for(;x>0;x--) { if(fecha.dia>1) fecha.dia--; else { if (fecha.mes==1) { fecha.mes=12; fecha.any--; } else fecha.mes--; fecha.dia = dias_mes(fecha); } } return fecha; } int dia_semana(struct _fecha fecha2) { // Finalidad: Halla el día de la semana de una fecha (lunes, martes...) // Argumentos: Una fecha (struct _fecha). // Devuelve: 1 para lunes, 2 para martes... struct _fecha fecha1 = {14, 9, 1752}; switch(cuenta_dias(fecha1, fecha2)%7) { case 3: return 7; // Domingo case 4: return 1; // Lunes case 5: return 2; // Martes case 6: return 3; // Miércoles case 0: return 4; // Jueves case 1: return 5; // Viernes case 2: return 6; // Sábado } } int compararFechas(struct _fecha fecha1, struct _fecha fecha2) { // Finalidad: Compara dos fechas y comprueba cuál es anterior a la otra // Argumentos: Dos fechas (struct _fecha). // Devuelve: 0 si ambas son iguales, 1 si fecha1 es anterior a fecha2, -1 si fecha1 es posterior a fecha2 if (fecha1.any == fecha2.any) { if (fecha1.mes == fecha2.mes) { if (fecha1.dia == fecha2.dia) return 0; else { if (fecha1.dia > fecha2.dia) return -1; else return 1; } } else { if(fecha1.mes > fecha2.mes) return -1; else return 1; } } else { if (fecha1.any > fecha2.any) return -1; else return 1; } } struct _fecha domingo_pascua(int any) { // Finalidad: Calcula el Domingo de Pascua de un determinado año // Argumentos: Se le pasa un año (int). No es necesario pasarle una fecha entera // Devuelve: la fecha entera del Domingo de Pascua struct _fecha fecha; int a, b, c, d, e, n; a = any % 19; b = any % 4; c = any % 7; d = (19 * a + 24) % 30; e = (2*b + 4*c + 6*d + 5) % 7; n = 22 + d + e; if (n <= 31) { fecha.dia = n; fecha.mes = 3; } else { fecha.dia = n - 31; fecha.mes = 4; } return fecha; }
Con estas dos líneas se puede formatear una fecha en castellano (y en otro idioma instalado):
Se puede conseguir ayuda en la web de PHP (http://es.php.net/strftime)
// Establecer la constante global LC_TIME a español // NOTA: Esto se establece globalmente para PHP, si éste está // cargado como Módulo en vez de CGI. Esto es, desde que se establece // hasta que se cierra PHP, no hasta que termina el script. setlocale(LC_TIME, 'sp'); // Es un poco diferente a la función Date() pero los argumentos son los mismos echo strftime('%A, %d de %B de %Y'); // Escribe: martes, 19 de junio de 2007
<?php $tomorrow = mktime(0, 0, 0, date("m") , date("d")+1, date("Y")); $lastmonth = mktime(0, 0, 0, date("m")-1, date("d"), date("Y")); $nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")+1); echo date("M-d-Y",$tomorrow); echo date("M-d-Y",$lastmonth); echo date("M-d-Y",$nextyear); ?>
java.util.Calendar cal=java.util.GregorianCalendar.getInstance(); cal.setLenient(true); cal.add(java.util.Calendar.MONTH, 1); cal.set(java.util.Calendar.DAY_OF_MONTH, 1); // Ahora lo imprimimos java.text.SimpleDateFormat format=new java.text.SimpleDateFormat("dd/MM/yyyy"); System.out.println(format.format(new java.util.Date(cal.getTimeInMillis())));
10.minutes.ago unParDeDias.days.ago 3.years.since(tiempo) 9.weeks.from_now 3.hours.until(horaAlarma)
Calendar cal = GregorianCalendar.getInstance(); cal.set(2006, 1, 1); // Febrero 2006, los meses empiezan en 0. System.out.println("Último día: " + cal.getActualMaximum(GregorianCalendar.DAY_OF_MONTH));