[Stocks] Cualcular cuantos dias han pasado entre 2 fechas
#1
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] = { 312831303130313130313031 };
#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 
daysbuffer;
    
    if (
year1 == year2)
    {
        
days = (month1 == month2) ? day2 day1 MONTH_DAYS(month1) - day1 day2;
        
        for (
buffer month1 1buffer month2buffer++)
            
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 1buffer month2 MONTHSbuffer++)
            
days += (buffer MONTHS) ? MONTH_DAYS(buffer MONTHS) : MONTH_DAYS(buffer);
        
        for (
buffer year2 1buffer year1buffer--)
        {
            
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 == 0) && (year 100 != 0) || (year 400 == 0))
        return 
true;
    
    return 
false;

Responder
#2
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)...
[Imagen: 76561197999970868.png]
Responder
#3
(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?
Responder
#4
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
Responder
#5
(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í.
Responder
#6
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
Responder
#7
Es mejor y mas rapido con const
Todos los MODS VHL totalmente gratuitos  Descarga Aqui

Mis plugins:
STEAM: https://steamcommunity.com/id/Metrikcz/
FB: fb.com/rwoong
Venta plugins a pedido en México mándame MP
Responder
#8
(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
Responder
#9
(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?
Responder
#10
(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
Responder
#11
(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.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)