Функция которая переведёт Unixtime в число, месяц, год , минуты и секунды
#1

Сабж. Не предлагать сайты и прочую лабуду, нужна конкретная вычислительная функция которая с точностью 1к1 мне выдаст число, месяц, год, минуты и секунды из Unixtime. Чтобы грубо говоря я написал "%s", UnixtimeToReal(0) и место %s получил 01.01.1970 00:00.
Reply
#2

а GetDate и GetTime не подойдут? или тебе чтото конкретное нужно? чот я непонял.

The function itself returns a Unix Timestamp, however if arguments are specified then the hours, minutes and seconds for the current time are returned.
Reply
#3

PHP код:
/*
    Возвращает UNIX TIMESTAMP в соответствии с указанной датой.
    ПОДРОБНЕЕ
        UNIX TIMESTAMP это кол-во секунд со дня 01.01.1970, 00:00:00 до
        указанной в параметрах даты
    ВЕРНЕТ
        число integer (4 байта)
*/
stock date_to_timestamp
(
    
year 1970,    month 1,    day  1,
    
hour =  0,    minute 0,    second 0
)
{
    switch ( 
month )
    {
        case 
day += 31;    case day += 59;    case day += 90;
        case 
day += 120;    case day += 151;    case day += 181;
        case 
day += 212;    case day += 243;    case 10 day += 273;
        case 
11 day += 304;    case 12 day += 334;
    }
    return ( 
second minute*60 hour*3600 + (day 1)*86400
        
+ (year 1970)*31557600 + ( year == 21600 ) );

PHP код:
/*
    Возвращает по ссылке дату в соответствии с указанным UNIX TIMESTAMP.
    ПОДРОБНЕЕ
        UNIX TIMESTAMP это кол-во секунд со дня 01.01.1970, 00:00:00 до
        указанной в параметрах даты. Если он правильно указан, то в
        year будет помещен год, в month - месяц, в day - день,
        в hour - час, в minute - минута, в second - секунда.
    ВЕРНЕТ
        ничего
*/
stock timestamp_to_date
(
    
unix_timestamp 0,
    & 
year 1970,        & month 1,        & day  1,
    & 
hour =  0,        & minute 0,        & second 0
)
{
    
year unix_timestamp 31557600;
    
unix_timestamp -= year 31557600;
    
year += 1970;
    if ( 
year == unix_timestamp -= 21600;
    
day unix_timestamp 86400;
    switch ( 
day )
    {
        
// в second будет временно хранится число месяца
        
case  0..30 : { second day;    month 1; }
        case  
31..58 : { second day 31month 2; }
        case  
59..89 : { second day 59month 3; }
        case 
90..119 : { second day 90month 4; }
        case 
120..150 : { second day 120month 5; }
        case 
151..180 : { second day 151month 6; }
        case 
181..211 : { second day 181month 7; }
        case 
212..242 : { second day 212month 8; }
        case 
243..272 : { second day 243month 9; }
        case 
273..303 : { second day 273month 10; }
        case 
304..333 : { second day 304month 11; }
        case 
334..366 : { second day 334month 12; }
    }
    
unix_timestamp -= day 86400;
    
hour unix_timestamp 3600;
    
unix_timestamp -= hour 3600;
    
minute unix_timestamp 60;
    
unix_timestamp -= minute 60;
    
day second 1;
    
second unix_timestamp;

by MX_Master
Reply
#4

Спасибо конечно, но что то функция не работает должным образом либо я что то не так понял.
в мод вставил:
Код:
stock timestamp_to_date
(
    unix_timestamp = 0,

    & year = 1970,        & month = 1,        & day  = 1,
    & hour =  0,        & minute = 0,        & second = 0
)
{
    year = unix_timestamp / 31557600;
    unix_timestamp -= year * 31557600;
    year += 1970;

    if ( year % 4 == 0 ) unix_timestamp -= 21600;

    day = unix_timestamp / 86400;

    switch ( day )
    {
        // в second будет временно хранится число месяца
        case  0..30 : { second = day;    month = 1; }
        case  31..58 : { second = day - 31; month = 2; }
        case  59..89 : { second = day - 59; month = 3; }
        case 90..119 : { second = day - 90; month = 4; }
        case 120..150 : { second = day - 120; month = 5; }
        case 151..180 : { second = day - 151; month = 6; }
        case 181..211 : { second = day - 181; month = 7; }
        case 212..242 : { second = day - 212; month = 8; }
        case 243..272 : { second = day - 243; month = 9; }
        case 273..303 : { second = day - 273; month = 10; }
        case 304..333 : { second = day - 304; month = 11; }
        case 334..366 : { second = day - 334; month = 12; }
    }

    unix_timestamp -= day * 86400;
    hour = unix_timestamp / 3600;

    unix_timestamp -= hour * 3600;
    minute = unix_timestamp / 60;

    unix_timestamp -= minute * 60;
    day = second + 1;
    second = unix_timestamp;
}
Использую:
Код:
new unban_date[64] = timestamp_to_date(res[2]);
timestamp_to_date(unbantime);
Ошибки:
Код:
new_serv.pwn(442) : error 035: argument type mismatch (argument 1)
new_serv.pwn(442) : error 008: must be a constant expression; assumed zero
строка 442 - new unban_date[64] = timestamp_to_date(res[2]);
Reply
#5

Ещё один вопрос, я создал список ссылок по которым будет воспроизводится поток в случайном порядке в зависимости от выпадшего числа.
Код:
new MusicNumber = 15;
new LoginMusic[15][64] = {
{"http://cs4897.vk.com/u2735926/audio/2e077ffa982f.mp3"},
{"http://cs4865.vk.com/u61450/audio/41cf98d3190b.mp3"},
{"http://cs5278.vk.com/u61450/audio/b9913032bce6.mp3"},
{"http://cs5569.vk.com/u61450/audio/97ad58e7085b.mp3"},
{"http://cs5278.vk.com/u61450/audio/192e99344696.mp3"},
{"http://cs4636.vk.com/u2000847/audio/69a6f745a23f.mp3"},
{"http://cs4604.vk.com/u3171457/audio/30a654f1113f.mp3"},
{"http://cs4838.vk.com/u74442484/audio/55d1959d1745.mp3"},
{"http://cs5572.vk.com/u99217144/audio/16dd24fc149a.mp3"},
{"http://cs5232.vk.com/u125129202/audio/9116d398046e.mp3"},
{"http://cs5232.vk.com/u125129202/audio/34711d546013.mp3"},
{"http://cs5059.vk.com/u5645681/audio/ffbc40e612ab.mp3"},
{"http://cs4614.vk.com/u47452768/audio/ff1c509183f1.mp3"},
{"http://cs4773.vk.com/u61624483/audio/5fabfbc4483d.mp3"},
};
Как мне получить рандом из 15 и чтобы допустим если выпало число 1, воспроизвело 1ую аудиозапись в списке, если 2 то 2ую и так далее.
я накляпал кривой код, он походу не работает
Код:
	new rand, music[64];
	rand = random(MusicNumber);
	format(music,sizeof(music),"%s",LoginMusic[rand]);
	PlayAudioStreamForPlayer(playerid, music ,0.0, 0.0, 0.0, 0.0,0);
Пишет ошибку:
Код:
new_serv.pwn(31) : error 029: invalid expression, assumed zero
new_serv.pwn(31) : error 008: must be a constant expression; assumed zero
Строка 31 - };
Reply
#6

Использование:
PHP код:
new yearmonthdayhourminutesecond// Сюда вернется дата
// unix_timestamp - исходный Unixtime 
timestamp_to_dateunix_timestampyearmonthdayhourminutesecond ); 
Reply
#7

Так:
PHP код:
PlayAudioStreamForPlayer(playeridLoginMusic[random(sizeof(LoginMusic))], 0.00.00.00.0,0); 
Reply
#8

Изминений никаких, ни там ни там.
Код:
			new unixtime, year, month, day, hour, minute, second;
			unixtime = res[2]; //new_serv.pwn(439) : error 006: must be assigned to an array
			timestamp_to_date( unixtime, year, month, day, hour, minute, second );
Вот вообще функция над которой я работаю:
Код:
stock CheckIPBanned(playerid)
{
	new query[256];
	new string[256];
	new ipadress[16];
	GetPlayerIp(playerid, ipadress, sizeof(ipadress));
	format(query,sizeof(query),"SELECT * FROM `ip_bans` WHERE ip_adress = '%s'",ipadress);
	mysql_query(query);
	mysql_store_result();
	if(mysql_num_rows()==1)
	{
		new tmp[72], res[4][64];
		mysql_fetch_row(tmp);
		split(tmp, res, '|');
		if(strval(res[2]) > gettime())
		{
			new unixtime, year, month, day, hour, minute, second;
			unixtime = res[2];
			timestamp_to_date( unixtime, year, month, day, hour, minute, second );  
			format(string,sizeof(string),"{ffffff}IP с которого вы пытаетесь зайти [ {ff0000}%s{ffffff} ] заблокирован.\nПричина: {ff0000}%s.\n{ffffff}Аккаунт будет разбанен - %d.%d.%d в %d:%d", ipadress, res[1], day, month, year, hour, minute);
			ShowPlayerDialog(playerid,999,DIALOG_STYLE_MSGBOX,"{ff0000}Ваш IP был заблокирован!",string,"Okay :(","");
			Kick(playerid);
		}
		else
		{
			format(query,sizeof(query),"DELETE FROM `ip_bans` WHERE ip_adress='%s'",ipadress);
			mysql_query(query);
		}
	}
}
Reply
#9

На всякий случай скажу:

Никогда не используйте ссылки аудиопотоков из Vkontakte

Почему? Во 1 ссылка выдается только на 1 IP адрес, во 2 устаревает через 36 часов.
Reply
#10

Crystal_Speed, попробуй для начала строку в число преобразовать.
Quote:
Originally Posted by jhonyxakep
Посмотреть сообщение
На всякий случай скажу:

Никогда не используйте ссылки аудиопотоков из Vkontakte

Почему? Во 1 ссылка выдается только на 1 IP адрес, во 2 устаревает через 36 часов.
не пали контору, чел к прогрессу идет.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)