[Include] zTime
#1

zTime
Funciones del tiempo/fecha.

zTime es un simple include con funciones para obtener datos del tiempo, ya sea que dнa de la semana cae la fecha que sea, obtener datos rбpidamente en formatos variados (vйase funciones que obtienen la fecha en un formato establecido y funciones individuales para ordenarlas en otro).

FUNCIONES.

v 1
Код:
* GetDayOfWeek(day, month, year); - Obtiene el nombre del dнa de la semana de la fecha indicada
* GetDate(); - Obtiene la fecha en formato "Sбbado 23 de Agosto del 2014".
* GetTime(); - Obtiene la hora del servidor en formato "08:47:56".
* GetMonthName(month); - Obtiene el nombre del mes
* IsLeapDay(year); - Comprueba si el aсo es bisiesto o no (Gracias a este algoritmo http://es.wikipedia.org/wiki/A%C3%B1..._computacional)
v 1.1 - Ultima actualizacion
La funciуn GetDate(); antes imprimнa: "Lunes 21 de Marzo del 2016", ahora imprime: "Lunes 21 de Marzo del 2016 - 03:19 PM.
Код:
* Aсadida la funciуn getTotalDaysInMonth(_month, year) para obtener el total de dнas de un mes.
* Agregada GetSpecificDate(day = -1, month = -1, year = -1); para obtener la fecha en formato: "Lunes 21 de Marzo del 2016", sin embargo esta funciуn es para cuando se necesite especificar una fecha, y no sуlo obtener la actual. Al dejar todos los parбmetros en su opcional actuarб como GetDate() nada mбs que sin la hora.
* Fue agregada GetTotalDaysFromYear(year) que permite obtener el total de dias que tiene un aсo, es una funcion simple nada mas por el tema de los aсos biciestos.
* Agregado GetLeftDaysFromYear(day, _month, year) que permite obtener la cantidad de dias que faltan para que termine el aсo.
* Agregada CountDaysSpentInYear(day, _month, Year) que permite obtener la cantidad de dias que han pasado ya en el aсo.
* Agregada GetDateDateAddingDays(days, months, _day, _month, _year, &dia, &mes, &year) que permite obtener la fecha en variables, cuando se agreguen dias o meses. Si a 22-03-2016 le agregamos +15 dias, comunmente llegaria a 36-03-2016, sin embargo esta funcion permite aplicar las normas. Haciendo que aumente el mes, o incluso si estuvieramos en 29-12-2016 aumentaria el aсo. Evitando que se pierda la linea de la fecha conocida.
* Agregada GetCurrentDateAddingDays(days, &dia, &mes, &year), actuando como GetDateDateAddingDays, solamente que en esta funcion no se especifica la fecha a la que se le adicionaran dias, y no permite adicionar meses, unicamente dias. Util para sistemas VIP.
* Agregada GetCurrentDateAddingMonths(months, &dia, &mes, &year), que actua como     GetDateDateAddingDays, pero aqui son meses.
* Agregada PrintDate() que obtiene la fecha actual en YYYY-MM-DD, HH:MM
* Agregada DateToUnix(day, month, year) que permite pasar de tiempo real DIA-MES-AСO a tiempo UNIX.
* Agregada UnixToDate(x, &_day, &_month, &_year) que permite pasar de tiempo UNIX a DIA-MES-AСO

* Funciones de tiempo a string.

* Agregada GetDateFromStr_YYYYMMDDHHMM(str[], &day, &month, &year, &hour, &minute) que permite pasar una fecha al formato YYYY-MM-DD HH:MM
* Agregada GetDateFromStr_DDMMYYYYHHMM(str[], &day, &month, &year, &hour, &minute) que permite pasar una fecha de variables al formato DD-MM-YYYY HH:MM

Las funciones de tiempo especificadas anteriormente, no estan completas. Pronto se permitira pasar los datos al formato que se quiera evitando la limitacion por funcion. 

* Agregada FixFormatHour(hour, minute) que permite pasar horas de 3:2 a 03:02. No se ha utilizado %02d porque no cumplia con lo que se queria para la funcion..
* Agregada convert24HoursTo12Hours(time[]) que permite pasar de 24 horas: 13:00, a 12 Horas: 01:00 PM.
Un ejemplo, acб hay un cуdigo para saber quй dнa de la semana / fecha general serб en los dнas que faltan en el aсo.

PHP код:
main()
{
    new 
dia,
         
mes,
         
anual,
        
fecha[3] = {19,3,2016};
    for(new 
1GetLeftDaysFromYear(fecha[0], fecha[1], fecha[2])-1i++)
    {
        
GetCurrentDateAddingDays(i+1diamesanual);
        
printf("%i. %s"iGetSpecificDate(diamesanual));
        
//sleep(1000/4); En caso de que quieran leerlos.
     
}



CУDIGO.


PHP код:
/* zTime - _Zume */
#include <a_samp>
#if !defined gettime_ex
    #define gettime_ex gettime
#endif
#define GetCurrentDate()     GetSpecificDate(-1, -1, -1)
#define IsLeapYear(%1)         ((%1 % 4 == 0 && %1 % 100 != 0) || %1 % 400 == 0)
stock GetDayOfWeek(daymonthyear// Basado en http://es.wikipedia.org/wiki/Congruencia...6.76042627
{
    static const 
DaysWeek[][24] = {
        
"Lunes",        //       0
        
"Martes",       //      1
        
"Miйrcoles",    //      2
        
"Jueves",       //      3
        
"Viernes",      //      4
        
"Sбbado",       //      5
        
"Domingo"       //      6
    
};
    new
        
d_[4],
        
m_[10]
    ;
    
d_[0] = (14-month) / 12d_[2] = year d_[0], d_[1] = month + (12*d_[0]) - 2;
    
d_[3] = (day d_[2] + (d_[2]/4) - (d_[2]/100) + (d_[2]/400) + (31*d_[1]) / 12) % 7;
    if(
d_[3] == 0)
    {
        
d_[3] = sizeof(DaysWeek) - 1;
    }
    else
    {
        
d_[3] -= 1;
    }
    
    
format(m_sizeof(m_), "%s"DaysWeek[d_[3]]);
    return 
m_;
}
stock GetDate()
{
    new 
output[40];
    new 
_dat[3];
    
gettime_ex(_dat[0], _dat[1], _dat[2]);
    
format(outputsizeof(output), "%i:%i"_dat[0], _dat[1]);
    
format(outputsizeof(output), "%s - %s"GetCurrentDate(), convert24HoursTo12Hours(output));
    return 
output;
}
stock GetTime()
{
    new
        
m_[34],
           
d_[3]
    ;
    
gettime_ex(d_[0], d_[1], d_[2]), format(m_sizeof(m_), "%02d:%02d"d_[0], d_[1], d_[2]);
       return 
m_;
}
stock GetMonthName(month)
{
    static const 
MonhtsYears[12][] = {
        
"Enero",            // 0
        
"Febrero",          // 1
        
"Marzo",            // 2
        
"Abril",            // 3
        
"Mayo",                // 4
        
"Junio",               // 5
        
"Julio",               // 6
        
"Agosto",           // 7
        
"Septiembre",          // 8
        
"Octubre",          // 9
        
"Noviembre",           // 10
        
"Diciembre"            // 11
    
};
    new
        
month_str[24]
    ;
    if(
month && month <= sizeof(MonhtsYears)) {
        
format(month_strsizeof(month_str), "%s"MonhtsYears[month-1]);
    }
    else{
        
format(month_strsizeof(month_str), "Unknown");
    }
    return 
month_str;
}
stock getTotalDaysInMonth(_monthyear)
{
    new 
dias[] = {
        
31// Enero
        
28// Febrero
        
31// Marzo
        
30// Abril
        
31// Mayo
        
30// Junio
        
31// Julio
        
31// Agosto
        
30// Septiembre
        
31// Octubre
        
30// Noviembre
        
31  // Diciembre
    
};
    return ((
_month >= && _month <= 12) ? (dias[_month-1] + (IsLeapYear(year) && _month == 0)) : 0);
}
stock GetSpecificDate(day = -1month = -1year = -1)
{
    new 
str[64];
    if(
day == -&& month == -&& year == -1)
    {
        new 
_year_month_day;
        
getdate(_year_month_day);
        
format(strsizeof(str), "%s %i de %s del %i"GetDayOfWeek(_day_month_year), _dayGetMonthName(_month), _year);
    }
    else
    {
        
format(strsizeof(str), "%s %i de %s del %i"GetDayOfWeek(daymonthyear), dayGetMonthName(month), year);
    }
    return 
str;
}
stock GetTotalDaysFromYear(year) return IsLeapYear(year) ? 366 365;
stock GetLeftDaysFromYear(day_monthyear) return GetTotalDaysFromYear(year) - CountDaysSpentInYear(day_monthyear);
stock CountDaysSpentInYear(day_monthYear)
{
    new 
SumaDeDias day;
    for(new 
1<= _month-1i++)
        
SumaDeDias += getTotalDaysInMonth(iYear);
    return 
SumaDeDias;
}
stock GetDateDateAddingDays(daysmonths_day_month_year, &dia, &mes, &year)
{
    return 
UnixToDate(DateToUnix(_day_month_year) + (days * (60 60 24) + months * (60 60 24 30)), diamesyear);
}
stock GetCurrentDateAddingDays(days, &dia, &mes, &year)
{
    new 
_year_month_day;
    
getdate(_year_month_day);
    
GetDateDateAddingDays(days0_day_month_yeardiamesyear);
    return 
1;
}
stock GetCurrentDateAddingMonths(months, &dia, &mes, &year)
{
    new 
_year_month_day;
    
getdate(_year_month_day);
    
GetDateDateAddingDays(0months_day_month_yeardiamesyear);
    return 
1;
}
stock GetDateFromStr_YYYYMMDDHHMM(str[], &day, &month, &year, &hour, &minute)
{
    
// formato -> YYYY/mm/dd, hh:mm
    
new numberStr[12];
    
strmid(numberStrstr810);
    
day strval(numberStr);
    
strmid(numberStrstr57);
    
month strval(numberStr);
    
strmid(numberStrstr04);
    
year strval(numberStr);
    
strmid(numberStrstr1214);
    
hour strval(numberStr);
    
strmid(numberStrstr15strlen(str)-1);
    
minute strval(numberStr);
    return 
1;
}
stock GetDateFromStr_DDMMYYYYHHMM(str[], &day, &month, &year, &hour, &minute)
{
    
// formato -> dd/mm/YYYY, hh:mm
    
new numberStr[12];
    
strmid(numberStrstr02);
    
day strval(numberStr);
    
strmid(numberStrstr35);
    
month strval(numberStr);
    
strmid(numberStrstr610);
    
year strval(numberStr);
    
strmid(numberStrstr1214);
    
hour strval(numberStr);
    
strmid(numberStrstr15strlen(str)-1);
    
minute strval(numberStr);
    return 
1;
}
stock FixFormatHour(hourminute)
{
    
// 6:3 convert to 06:03
    
    
new str[9];
    new 
bool:fixedHour[2];
    
    if(
<= hour <= 9){
        
format(strsizeof(str), "0%i"hour);
        
fixedHour[0] = true;
    }
    if(
<= minute <= 9){
        
format(strsizeof(str), "%s:0%i"strminute);
        
fixedHour[1] = true;
    }
    if(
fixedHour[0] == false){
        
format(strsizeof(str), "%i"hour);
    }
    if(
fixedHour[1] == false){
        
format(strsizeof(str), "%s:%i"strminute);
    }
    
    
/* format(str, sizeof(str), "%02d:%02d", hour, minute); <-- This does not work, does not meet the need correctly. */
    
return str;
}
stock convert24HoursTo12Hours(time[])
{
    
// 13:00 -> 01:00 PM
    
new output[32];
    new 
pos strfind(time":");
    
    
strmid(outputtime0pos+1);
    new 
hora strval(output);
    
strmid(outputtimepos+1strlen(time));
    new 
minuto strval(output);
    new 
_formatTime[3];
    if(
hora >= 13 && hora <= 24){
        
format(_formatTimesizeof(_formatTime), "PM");
        
hora hora 12;
    }
    else if(
hora >= && hora <= 12){
        
format(_formatTimesizeof(_formatTime), "AM");
    }
    
format(outputsizeof(output), "%s %s"FixFormatHour(horaminuto), _formatTime);
    return 
output;
}
stock PrintDate() // YYYYMMDDHHMM
{
    new 
output[40],
        
_dat[6];
        
    
getdate(_dat[0], _dat[1], _dat[2]);
    
gettime_ex(_dat[3], _dat[4], _dat[5]);
    
format(outputsizeof(output), "%02d/%02d/%d, %02d:%02d"_dat[0], _dat[1], _dat[2], _dat[3], _dat[4]);
    return 
output;
}
stock DateToUnix(daymonthyear)
{
    new 
0;
    for(new 
1970yearj++)
    {
        
+= (60 60 24)* 365;
        if(
IsLeapYear(j)){
            
+= (60*60)*24;
        }
    }
    
month--;
      for (new 
0monthi++){
        
+= getTotalDaysInMonth(monthyear) * 86400;
      }
      
+= day 86400;
    return 
x;
}
stock UnixToDate(x, &_day, &_month, &_year)
{
    new 
year 1970;
    new 
dia 1;
    new 
mes 1;
    while(
>= 86400) {
         
-= 86400;
           
dia ++;
         if(
dia getTotalDaysInMonth(mesyear)) {
               
dia 1;
             
mes ++;
               if(
mes 12) {
                
year ++;
                
mes 1;
              }
         }
    }
    
_day dia;
    
_month mes;
    
_year year;
    return 
x;

Reply
#2

ohhhh esto es geniaaal !
Reply
#3

HIJO DE PUTA MUY BIEN!!

Deberнas ponerlo en la secciуn inglesa (si quieres te ayudo con el inglйs ).
Reply
#4

Muy bien zume, gracias por aportar esto servirб de mucho +rep(Cuando pueda)
Reply
#5

Por que la funciуn esta en ingles y retorna valores en espaсol?
Reply
#6

En general la gente acostumbra a hacer los cуdigos en ingles.
Reply
#7

Quote:
Originally Posted by 0xFFFFFF
Посмотреть сообщение
Por que la funciуn esta en ingles y retorna valores en espaсol?
Porque si alguien de otra secciуn lo ve y estб en espaсol no lo entenderб, en cambio el inglйs es un idioma mбs universal y es mбs fiable a ser comprendido por todos.
Reply
#8

con un poco de imaginacion para borrar las cuentas de los users inactivos... esta muy bien.
Muhas gracias

+rep a Zume y a Julius Christian Johannes Zeller
Reply
#9

Quote:
Originally Posted by 0xFFFFFF
Посмотреть сообщение
Por que la funciуn esta en ingles y retorna valores en espaсol?
Es una forma de mostrar el control que tienen sobre nosotros los ingleses.
Reply
#10

no esta mal la forma, pero hay otra forma mucho mejor.
saludos.


pawn Код:
stock GetDayOfWeek(){
    new data[10];
    switch(((gettime()+334800)/86400-(gettime()+334800)/86400/7*7)){
        case 1: data = "Lunes";
        case 2: data = "Martes";
        case 3: data = "Miйrcoles";
        case 4: data = "Jueves";
        case 5: data = "Viernes";
        case 6: data = "Sбbado";
        case 7: data = "Domingo";
        default: data = "ERROR!";
    }return data;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)