Mensajes: 2,571
Temas: 40
Registro en: Feb 2014
Reputación:
72
10/06/2014, 03:50 AM
(Última modificación: 10/06/2014, 10:18 PM por Mía.)
Código PHP: // Algunos offsets del calendario... const MONTHS = 12; const LEAP_MONTH = 2; const LEAP_DAY = 29; const YEAR_DAYS = 365; stock const mdays[MONTHS] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; #define MONTH_DAYS(%0) mdays[%0-1]
// Contar los dias entre 2 fechas (stock muy preciso) // La fecha 1 debe ser menor o igual a la fecha 2 stock days_between_dates(const day1, const month1, const year1, const day2, const month2, const year2) { new days, buffer; if (year1 == year2) { days = (month1 == month2) ? day2 - day1 : MONTH_DAYS(month1) - day1 + day2; for (buffer = month1 + 1; buffer < month2; buffer++) days += MONTH_DAYS(buffer); if (leap_year(year1) && month1 <= LEAP_MONTH && month2 > LEAP_MONTH) days++; } else { days = MONTH_DAYS(month1) - day1 + day2; for (buffer = month1 + 1; buffer < month2 + MONTHS; buffer++) days += (buffer > MONTHS) ? MONTH_DAYS(buffer - MONTHS) : MONTH_DAYS(buffer); for (buffer = year2 - 1; buffer > year1; buffer--) { days += YEAR_DAYS; if (leap_year(buffer)) days++; } if (leap_year(year1) && month1 <= LEAP_MONTH) days++; if (leap_year(year2) && month2 > LEAP_MONTH) days ++; } return days; }
// Saber si un año es bisiesto stock bool:leap_year(const year) { if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) return true; return false; }
Mensajes: 225
Temas: 15
Registro en: Oct 2013
Reputación:
1
Con todo respeto, pero es una estupidez... Si tenemos TimeStamp... Para que quieres saber cuanto ha pasado... Solo con dos cifras de timestamp puedes saberlo.
Restas la primera cifra con la segunda y la diferencia la divides en 86400 (día)...
Mensajes: 2,571
Temas: 40
Registro en: Feb 2014
Reputación:
72
10/06/2014, 04:37 PM
(Última modificación: 10/06/2014, 04:38 PM por Mía.)
(10/06/2014, 03:58 PM)LA BANDA escribió: Con todo respeto, pero es una estupidez... Si tenemos TimeStamp... Para que quieres saber cuanto ha pasado... Solo con dos cifras de timestamp puedes saberlo.
Restas la primera cifra con la segunda y la diferencia la divides en 86400 (día)...
Y para convertir una fecha a timestamp... necesitas otro stock igual...
EDIT: y si es una fecha menor a 1970 o mayor a 2038?
Mensajes: 2,459
Temas: 15
Registro en: Feb 2014
Reputación:
28
No leí casi nada pero es al pedo crear esa const de meses simplemente obtener el resto de 2 si es 1 es 31 si es 0 es 30 salvo q sea febrero , compruebas q no sea año bisiesteo? A y esto va en aportes
[TUT] Carnage
Fight
"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"
Anónimo
Mensajes: 2,571
Temas: 40
Registro en: Feb 2014
Reputación:
72
(10/06/2014, 06:01 PM)mongito100 escribió: No leí casi nada pero es al pedo crear esa const de meses simplemente obtener el resto de 2 si es 1 es 31 si es 0 es 30 salvo q sea febrero , compruebas q no sea año bisiesteo? A y esto va en aportes
Cómo lo harías sin esa const?
Hay 2 stocks, uno de calcular los dias y otro de año bisiesto, se usan los 2.
Posteé esto aquí porque vi que el printf de [R]ak estaba aquí.
Mensajes: 2,459
Temas: 15
Registro en: Feb 2014
Reputación:
28
Código PHP: public dias(mes,anio) { if(mes %2) return 31 else if(mes != 2) return 30 if(!(anio%4)) return 29 else return 28 }
lo hice medio rápido por q estoy viendo la tele
[TUT] Carnage
Fight
"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"
Anónimo
Mensajes: 965
Temas: 45
Registro en: Oct 2013
Reputación:
19
Es mejor y mas rapido con const
Mensajes: 2,459
Temas: 15
Registro en: Feb 2014
Reputación:
28
(11/06/2014, 12:27 AM)Metrikcz escribió: Es mejor y mas rapido con const
Si lo analistas te vas a dar cuenta q no; es un gasto inesesario de memoria y no se hacen mas procesos,es decir si yo le sacara la comprobación de año bisiesto(q el lo hace de todas formas en otra función)solo hago una operación matemática
[TUT] Carnage
Fight
"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"
Anónimo
Mensajes: 2,571
Temas: 40
Registro en: Feb 2014
Reputación:
72
12/06/2014, 12:54 AM
(Última modificación: 12/06/2014, 12:54 AM por Mía.)
(10/06/2014, 11:15 PM)mongito100 escribió: Código PHP: public dias(mes,anio) { if(mes %2) return 31 else if(mes != 2) return 30 if(!(anio%4)) return 29 else return 28 }
lo hice medio rápido por q estoy viendo la tele
Hacen falta más condiciones... Para agosto retornaría 30, para 1900 retornaría como bisiesto aunque no lo es...
¿Tanto por un const?
Mensajes: 2,459
Temas: 15
Registro en: Feb 2014
Reputación:
28
(12/06/2014, 12:54 AM)Mario AR. escribió: (10/06/2014, 11:15 PM)mongito100 escribió: Código PHP: public dias(mes,anio) { if(mes %2) return 31 else if(mes != 2) return 30 if(!(anio%4)) return 29 else return 28 }
lo hice medio rápido por q estoy viendo la tele
Hacen falta más condiciones... Para agosto retornaría 30, para 1900 retornaría como bisiesto aunque no lo es...
¿Tanto por un const? jajajaja recien mire el calendario -.-.son 24 bytes menos de memoria; no entendi lo del año bisiesto.
[TUT] Carnage
Fight
"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"
Anónimo
Mensajes: 2,571
Temas: 40
Registro en: Feb 2014
Reputación:
72
(12/06/2014, 07:42 AM)mongito100 escribió: jajajaja recien mire el calendario -.-.son 24 bytes menos de memoria; no entendi lo del año bisiesto. Un año es bisiesto cuando es un multiplo de 4 pero no de 100, o multiplo de 400. Por eso 1700, 1900, 2100 no son bisiestos.
|