PDA

Просмотр полной версии : [Вопрос] Функция вычитания одной даты из другой



Витёк
09.03.2017, 17:31
Добрый день
Если ли в сампе какая нибуть стандартная(самописная) функция для определенее дней
к примеру
GetTimeDate(09.02.2017, 09.04.2017)
и функция вернёт скока количество дней пройдёт с 09.02.2017 до 09.04.2017
Думаю понятно объяснил

Alpano
09.03.2017, 18:27
А UNIX time чем не понравилось?
Берешь 2 даты в данном формате и запускаешь через

print(timec($dateone,$datetwo));

timec(timestamp, compare = -1) {
if (compare == -1)
compare = gettime();
new Float:d = (timestamp > compare) ? timestamp - compare : compare - timestamp,
returnstr[48],n;
if (d < 60) {
format(returnstr, sizeof(returnstr), "< 1 минуты");
return returnstr;
} else if (d < 3600) {
n = floatround(floatdiv(d, 60.0), floatround_floor);
format(returnstr, sizeof(returnstr), "%s",FormatText("минута","минуты","минут",n));
} else if (d < 86400) {
n = floatround(floatdiv(d, 3600.0), floatround_floor);
format(returnstr, sizeof(returnstr), "%s",FormatText("час","часа","часов",n));
} else if (d < 2592000) {
n = floatround(floatdiv(d, 86400.0), floatround_floor);
format(returnstr, sizeof(returnstr), "%s",FormatText("день","дня","дней",n));
} else if (d < 31536000) {
n = floatround(floatdiv(d, 2592000.0), floatround_floor);
format(returnstr, sizeof(returnstr), "%s",FormatText("месяц","месяца","месяцев",n));
} else {
n = floatround(floatdiv(d, 31536000.0), floatround_floor);
format(returnstr, sizeof(returnstr), "%s",FormatText("год","года","лет",n));
}
format(returnstr, sizeof(returnstr), "%d %s", n, returnstr);
return returnstr;
}
FormatText(form1[32],form2[32],form3[32],count){
switch (((count>=0)?(count % 100):(count*-1 % 100)) % 10){
case 1: return form1;
case 2..4: return form2;
default: return form3;
}
return form3;
}

DeimoS
09.03.2017, 19:56
Можно использовать возможности MySQL (http://www.mysql.ru/docs/man/Date_and_time_functions.html), если это окажется целесообразно

Витёк
10.03.2017, 07:32
Можно использовать возможности MySQL (http://www.mysql.ru/docs/man/Date_and_time_functions.html), если это окажется целесообразно
у меня сервер на mxINI не хочу плагин MySQL подключать :boredom:

- - - Добавлено - - -


А UNIX time чем не понравилось?
Берешь 2 даты в данном формате и запускаешь через


timec(timestamp, compare = -1) {
if (compare == -1)
compare = gettime();
new Float:d = (timestamp > compare) ? timestamp - compare : compare - timestamp,
returnstr[48],n;
if (d < 60) {
format(returnstr, sizeof(returnstr), "< 1 минуты");
return returnstr;
} else if (d < 3600) {
n = floatround(floatdiv(d, 60.0), floatround_floor);
format(returnstr, sizeof(returnstr), "%s",FormatText("минута","минуты","минут",n));
} else if (d < 86400) {
n = floatround(floatdiv(d, 3600.0), floatround_floor);
format(returnstr, sizeof(returnstr), "%s",FormatText("час","часа","часов",n));
} else if (d < 2592000) {
n = floatround(floatdiv(d, 86400.0), floatround_floor);
format(returnstr, sizeof(returnstr), "%s",FormatText("день","дня","дней",n));
} else if (d < 31536000) {
n = floatround(floatdiv(d, 2592000.0), floatround_floor);
format(returnstr, sizeof(returnstr), "%s",FormatText("месяц","месяца","месяцев",n));
} else {
n = floatround(floatdiv(d, 31536000.0), floatround_floor);
format(returnstr, sizeof(returnstr), "%s",FormatText("год","года","лет",n));
}
format(returnstr, sizeof(returnstr), "%d %s", n, returnstr);
return returnstr;
}
FormatText(form1[32],form2[32],form3[32],count){
switch (((count>=0)?(count % 100):(count*-1 % 100)) % 10){
case 1: return form1;
case 2..4: return form2;
default: return form3;
}
return form3;
}

а по подробней как использовать

Alpano
11.03.2017, 15:24
а по подробней как использовать
Подробнее: тык (https://ru.wikipedia.org/wiki/UNIX-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F)
Понятнее:
1) сохраняем время в переменную ( в шапке создам переменную TIMETEST)

TIMETEST = gettime();

2) потом берем команду, и суем туда сей код:

printf("С момента сохранения времени прошло %s",timec(timestamp));

и смотри что выходит

DeimoS
11.03.2017, 15:43
Дело не в количестве аккаунтов, а в удобстве работы с ними. Сидеть на аккаунтах - это как до сих пор пользоваться повозкой с лошадью вместо автомобиля и потом думать как бедную лошадь заставить и днём, и ночью тебя возить без отдыха и еды.


Обе даны переводи в Unix время, находи большую, вычитай из неё меньшую и переводи полученное время в дни

Витёк
11.03.2017, 16:06
Можно закрывать тему сам написал функцию :sad:

DeimoS
11.03.2017, 16:31
Нет желания поделиться с другими получившимся кодом?

Витёк
12.03.2017, 09:30
Нет желания поделиться с другими получившимся кодом?
я чуть чуть по другому сделал
дни умножаю на 86400
Ну а вычесляю как-то так
new days = (тут переменная в которой храню результат при умножении - gettime()) / 86400 +1;
сразу просто не догодался по такому принципу сделать
просто вспомнил где-то видел функцию которую я просил в начале теме и был зациклен на ней