好吧,例子。
我有: 18-03-2016
我有一个函数,在函数中可以添加天、月和年(带参数)
如果我加上 14 天零 4 个月,
该格式之后的日期将是:32-07-2016
我需要制作函数来正确添加天/月/年
我想在几个月内转换为几天并这样操作..但问题在于闰年。
我还想过将日期转换为 unixtime,添加时间并将 unix 时间转换为 dd-mm-yy,但我不知道,我对此有很多问题..
编程语言是“PAWN”,类似于 C .. 但在这种编程语言中我们没有 POO(我提到这一点是为了让他们知道什么时候基本是这种编程语言,仅基于逻辑和基本结构.. for, if, else、case 等 ..),不存在 strpftime、strtototime、date(.. 等) 等函数。
我将此功能转换为..
stock DateToStamp(_day, _month, _year)
{
new total = 0;
new tmp = 0;
total += _day * 86400;
tmp = ((_year - 1968)/4)-((IsLeapYear(_year) && _month == 2) ? 2 : 1);
total += tmp * 31556926;
total += (_year - 1970 - tmp) * 31536000;
for(new i = 1; i < _month; i ++)
{
total += getTotalDaysInMonth(i, _year) * 86400;
}
total += 630214;
return total;
}
stock StampToDate(timestamp, &_day, &_month, &_year)
{
new year = 1970;
new day = 1;
new month = 1;
timestamp += 86400;
while(timestamp > 31536000)
{
timestamp -= 31536000;
if(IsLeapYear(year))
{
timestamp -= 86400;
}
year++;
}
while(timestamp > 86400)
{
timestamp -= 86400;
day++;
if(day == getTotalDaysInMonth(month, year))
{
month++;
}
}
printf("%i-%i-%i", day, month, year);
_day = day;
_month = month;
_year = year;
return 1;
}
stock GetTotalDaysFromYear(year)
{
return IsLeapYear(year) ? 366 : 365;
}
我认为根据逻辑来制作该功能..但不起作用,我的想法是它得到几个月并除以12(如果我们有一个十进制数.. 1.0435,将1和0.0435分开乘以12和得到subs-days..但我不知道这是否是最好的方法..
stock GetDateDateAddingDays(days, months, years, _day, _month, _year, &dia, &mes, &year)
{
printf("--------------");
// Obtener los meses generales;
new meses_generales = months;
new d, month_s;
new Float:obtener_operado = float(meses_generales)/12;
printf("%f", obtener_operado);
new get_entero = floatround(obtener_operado, floatround_floor);
printf("%i", get_entero);
new Float:obtener_decimales = obtener_operado-get_entero;
printf("[deb - f] %f - %f", obtener_operado, obtener_decimales);
new get_dias_from_meses = floatround(obtener_decimales * 12, floatround_floor);
printf("dias: %i", get_dias_from_meses);
/*
new get_days;
new day_residuo = floatround(f, floatround_ceil)/12;
new operable = f/12;
printf("[deb - day_residuo] %f", operable);
operable = operable-floatround(f, floatround_ceil);
new res = f_s - operable;
new month_s = f_s - f;
printf("[deb] %f - %f - %f", operable, f_s, f);
if(f > 0)
{
printf("____________ PRIMA ______________");
printf("[deb] %i", get_days);
get_days += floatround(f * 12, floatround_ceil);
printf("[deb] %i", get_days);
printf("____________ PRIMA ______________");
}
new d = days + get_days;
*/
printf("[deb] %i - meses %f - ages = %i", d, month_s, years);
/*
for(new m; m = months; m++)
{
for(new d = 1; d <= getTotalDaysInMonth(m, _year); d++)
{
days ++;
if(days == getTotalDaysInMonth(m, _year))
{
mes ++;
}
if(mes >= 12 && days >= 31){
year ++;
}
}
}
*/
/*
new tiempo = DateToStamp(_day, _month, _year);
tiempo += (days * 86400) + (months * 2592000) + (years * 31536000);
StampToDate(tiempo, dia, mes, year);*/
printf("--------------");
return 1;
}