PDA

View Full Version : Strange for cikle

MerryDeer
15/12/2016, 07:06 AM
Hi,

stock TimestampToDate(Timestamp, &year, &month, &day, &hour, &minute, &second, HourGMT, MinuteGMT = 0)
{
new tmp = 2;
year = 1970;
month = 1;
Timestamp -= 172800; // Delete two days from the current timestamp. This is necessary, because the timestamp retrieved using gettime() includes two too many days.
for(;;)
{
if(Timestamp >= 31536000)
{
year ++;
Timestamp -= 31536000;
tmp ++;
if(tmp == 4)
{
if(Timestamp >= 31622400)
{
tmp = 0;
year ++;
Timestamp -= 31622400;
}
else break;
}
}
else break;
}
for(new i = 0; i < 12; i ++)
{
if(Timestamp >= MonthTimes[i][2 + IsLeapYear(year)])
{
month ++;
Timestamp -= MonthTimes[i][2 + IsLeapYear(year)];
}
else break;
}
day = 1 + (Timestamp / 86400);
Timestamp %= 86400;
hour = HourGMT + (Timestamp / 3600);
Timestamp %= 3600;
minute = MinuteGMT + (Timestamp / 60);
second = (Timestamp % 60);
if(minute > 59)
{
minute = 0;
hour ++;
}
if(hour > 23)
{
hour -= 24;
day ++;
}
if(day > MonthTimes[month][IsLeapYear(year)])
{
day = 1;
month ++;
}
if(month > 12)
{
month = 1;
year ++;
}
return 1;
}

for(;;) what does it mean?

AroseKhanNiazi
15/12/2016, 08:48 AM
This converts a timestamp to date

Vince
15/12/2016, 08:54 AM
It's called a loop in English. I think I've told you that before. A for-loop with no initializers, no condition and no increment runs forever. It's equivalent to while(true). Although Pawn does not support that one.

MerryDeer
15/12/2016, 09:24 AM
if(day > MonthTimes[month][IsLeapYear(year)])
{
day = 1;
month ++;
}

Crash detect warning me array error where is month, because now is 12 month, and array MonthTimes contains MonthTimes[ 12 ], so i need to month-1 ?

OneDay
15/12/2016, 09:30 AM
No if January is 0 now is 11.

MerryDeer
15/12/2016, 09:36 AM
So why crash detect print my error?