PDA

Просмотр полной версии : [Вопрос] Unixtime



Salik_Davince
13.06.2020, 12:56
Здравствуйте, возник такой вопрос, то ли дело в функции, хотел узнать unixtime по дате последнего входа игрока (взял функцию mktime (oт yLess)) и вычитать с настоящим временем (gettime()), т.e сколько прошло секунд и вычитать с секундами - часы/дни и тд, проблема появилась при вызове функции mktime с аргументом последним входом (датой), дата = 12.6.2020 - 12:41:30 / mktime = 1595335290 должно быть - 1591965690, что отличается на 336960 секунд (т.e 56160мин, или 936часов), пробовал так же функции из инклуда mxdate, там так же некорректный перевод в unix, хотел попросту добавить эти секунды, но в дальнейшем не появятся ли баги с данной функцией?


Функция mktime -

stock mktime(hour,minute,second,day,month,year)
{
new timestamp2;

timestamp2 = second + (minute * 60) + (hour * 3600);

new days_of_month[12];

if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) {
days_of_month = {31,29,31,30,31,30,31,31,30,31,30,31}; // Schaltjahr
} else {
days_of_month = {31,28,31,30,31,30,31,31,30,31,30,31}; // keins
}
new days_this_year = 0;
days_this_year = day;
if(month > 1) { // No January Calculation, because its always the 0 past months
for(new i=0; i<month-1;i++) {
days_this_year += days_of_month[i];
}
}
timestamp2 += days_this_year * 86400;

for(new j=1970;j<year;j++) {
timestamp2 += 31536000;
if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) timestamp2 += 86400; // Schaltjahr + 1 Tag
}

return timestamp2;
}

DeimoS
13.06.2020, 14:24
Используй этот инклуд - https://github.com/Open-GTO/time_t

И опиши нормально что именно ты хочешь сделать, а так же уточни: делаешь ты это для игрока в оффлайне или для игрока в сети? Просто если для игрока в оффлайне, то гораздо проще всё на стороне БД высчитать одним запросом и получить готовую строку в нужном формате для вставки, чем изобретать велосипед.