stock bool:IsValidDate(dStr[]) { //By LORDZY!!!
new
monthDays[12] = {
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
},
temp_YMD[3],
temp_Pos = 0,
temp_ePos = 0,
temp_Index = 0
;
//Thought about implementing SSCANF_QUIET, but it requires spaces to work "currently".
for(temp_Index = strlen(dStr) - 1; temp_Index != 0; temp_Index--) {
if(!(dStr[temp_Index] >= 48 && dStr[temp_Index] <= 57))
dStr[temp_Index] = ' ';
}
if(sscanf(dStr, "iii", temp_YMD[0], temp_YMD[1], temp_YMD[2]))
return false;
temp_ePos = temp_Pos = -1;
for(temp_Index = 0; temp_Index < 3; temp_Index++) {
if(temp_YMD[temp_Index] > 1750) {
if((temp_YMD[temp_Index] % 400) == 0 || ((temp_YMD[temp_Index] % 100) != 0 && (temp_YMD[temp_Index] % 4) == 0))
monthDays[1] = 29;
}
else if(temp_YMD[temp_Index] > 12)
temp_Pos = temp_Index;
else
if(temp_ePos == -1)
temp_ePos = temp_Index;
else
temp_Pos = temp_Index;
}
if(temp_ePos == -1 || temp_Pos == -1)
return false;
if(temp_YMD[temp_ePos] < 1 || temp_YMD[temp_ePos] > 12)
return false;
if(temp_YMD[temp_Pos] < 1 || temp_YMD[temp_Pos] > monthDays[temp_YMD[temp_ePos] - 1])
return false;
return true;
}
Alles anzeigen