Русское сообщество по скриптингу

условия найти день месяц год  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

условия найти день месяц год

Сообщение RSO_ » 17 ноя 2019, 14:07

всем здрасти как лучше найти нужное нам дату в условии
как такое реализовать напр дд.мм.гг сравнить с текущей
или все переводить в дни часы и как учитывать количество
дней в месяцы.
слава великой сонтаранской империи !
Аватара пользователя
RSO_
 
Сообщения: 58
Зарегистрирован: 20 окт 2019, 21:40
Откуда: от верблюда
Благодарил (а): 19 раз.
Поблагодарили: 1 раз.
Опыт программирования: Меньше недели
Языки программирования: . . . 100 ISQ

Re: условия найти день месяц год

Сообщение RSO_ » 18 ноя 2019, 13:04

вот вапрос оптимально ли использовать данный код
учитывая то что я могу менять дату одной переменной
и что будет работать быстрее. первый вариант как есть
второй надо убрать два слэша (//) и закоментить
все вычисления hours day month year (hours += minutes / 60 minutes = minutes % 60 )
не трогать minutes += minutes;

Код: Выделить всё


public plugin_init() {    
    
register_plugin(PLUGINVERSIONAUTHOR);
    
register_clcmd("say test""check_Time")
}
public 
check_Time()    
{
    static 
minutes[10], lengthunban_time[32], dday[32], mmonth[32], yyear[32];
    
length str_to_num(minutes);
    
    
Get_Time(lengthddaysizeof(dday)- 1mmonthsizeof(mmonth)- 1yyearsizeof(yyear)- 1);

     
client_print(0print_chat"Time: %s.%s.%s"ddaymmonthyyear
}
        
Get_Time(const bantimedday[], len1mmonth[], len2yyear[], len3)  // code "Exolent" fix "Egor1496"
{
   static 
_hours[5], _minutes[5], _seconds[5], _month[5], _day[5], _year[7];

   
format_time(_hourssizeof(_hours) - 1"%H");
   
format_time(_minutessizeof(_minutes) - 1"%M");
   
format_time(_secondssizeof(_seconds) - 1"%S");
   
format_time(_monthsizeof(_month) - 1"%m");
   
format_time(_daysizeof(_day) - 1"%d");
   
format_time(_yearsizeof(_year) - 1"%Y");
   
   new 
hours str_to_num(_hours);
   new 
minutes str_to_num(_minutes);
   new 
seconds str_to_num(_seconds);
   new 
month str_to_num(_month);
   new 
day str_to_num(_day);
   new 
year str_to_num(_year);
  
   
minutes += minutes;
   
   
// while( minutes >= 60 )
   // {
   //   minutes -= 60;
   //   hours++;
   // }
   
   
hours += minutes 60
   minutes 
minutes 60
    
  
// while( hours >= 24 )
  // {
  //   hours -= 24;
  //   day++;
  //}
    
  
day += hours 24
  hours 
hours 24
    
  
new max_days GetDaysInMonth(monthyear);
  
  
// while( day > max_days )
  // {
  //   day -= max_days;
  //   month++;
  // }
  
  
month += day max_days
  day 
day max_days
    
  
// while( month > 12 )
  // {
  //   month -= 12;
  //   year++;
  // }
  
  
year += month 12
  month 
month 12
   
   
  formatex
(ddaylen1"%i"day);
  
formatex(mmonthlen2"%i"month);
  
formatex(yyearlen3"%i"year);
 
}

GetDaysInMonth(monthyear=0)
{
   switch( 
month )
   {
      case 
1:      return 31// january
      
case 2:      return ((year 4) == 0) ? 29 28// february
      
case 3:      return 31// march
      
case 4:      return 30// april
      
case 5:      return 31// may
      
case 6:      return 30// june
      
case 7:      return 31// july
      
case 8:      return 31// august
      
case 9:      return 30// september
      
case 10:   return 31// october
      
case 11:   return 30// november
      
case 12:   return 31// december
   
}
   
   return 
30;
}
 
слава великой сонтаранской империи !
Аватара пользователя
RSO_
 
Сообщения: 58
Зарегистрирован: 20 окт 2019, 21:40
Откуда: от верблюда
Благодарил (а): 19 раз.
Поблагодарили: 1 раз.
Опыт программирования: Меньше недели
Языки программирования: . . . 100 ISQ

Re: условия найти день месяц год

Сообщение Leonidddd » 18 ноя 2019, 18:01

RSO_, как-то странно описан вопрос, вы хотели что-то Вы должны зарегистрироваться, чтобы видеть ссылки.? Используйте get_systime для получения текущего точного времени и даты в формате unix.
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2259
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 182 раз.
Поблагодарили: 632 раз.

Re: условия найти день месяц год

Сообщение hren_morjovui » 18 ноя 2019, 18:11

Да, не совсем понятно что нужно, может вот это
Вы должны зарегистрироваться, чтобы видеть ссылки.
"В этом мире неизбежны три вещи: смерть, налоги и гравитация."
Аватара пользователя
hren_morjovui
 
Сообщения: 111
Зарегистрирован: 29 май 2018, 09:15
Благодарил (а): 55 раз.
Поблагодарили: 14 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
PHP
jQuery

Re: условия найти день месяц год

Сообщение RSO_ » 18 ноя 2019, 20:44

дело в том что я сам не знаю что хочу и поэтому сложно реализовать задуманное :crazy:
замысел такой плагин выдаёт флаги игрокам до определённой даты
т.e получаю текущую дату, перевожу в часы записываю в массив напр data1
получаю текущую дату прибавляю 5 дней, перевожу в часы записываю в массив напр data2
то есть выдаю админку на 5 дней

if(data1 < data2)
{
set_user_flags(id, read_flags("abcdefghijklmnopqrstu")
}

Код: Выделить всё

public check_Time
()    
{
    static minutes[10], length, unban_time[32], dday[32], mmonth[32], yyear[32];
    
    length 
= str_to_num(minutes);
    Get_Time(length, dday, sizeof(dday)- 1, mmonth, sizeof(mmonth)- 1, yyear, sizeof(yyear)- 1);
    
     new arrm_month
[] = {31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365}
          new day_to_hourse = (str_to_num(dday) * 24)
     new month_to_hourse = (arrm_month[str_to_num(mmonth) - 1] * 24)
     new year_to_hourse = (str_to_num(yyear) * 365 * 24)
     
     client_print
(0, print_chat, "Time: %i-%i-%i", dday, mmonth, yyear)
    
     client_print
(0, print_chat, "Time: %i", day_to_hourse + month_to_hourse + year_to_hourse) 
}
    
Get_Time
(const bantime, dday[], len1, mmonth[], len2, yyear[], len3) //  cod "Exolent" 
{
   static _hours[5], _minutes[5], _seconds[5], _month[5], _day[5], _year[7];
   
   format_time
(_hours, sizeof(_hours) - 1, "%H");
   format_time(_minutes, sizeof(_minutes) - 1, "%M");
   format_time(_seconds, sizeof(_seconds) - 1, "%S");
   format_time(_month, sizeof(_month) - 1, "%m");
   format_time(_day, sizeof(_day) - 1, "%d");
   format_time(_year, sizeof(_year) - 1, "%Y");
   
   new hours 
= str_to_num(_hours);
   new minutes = str_to_num(_minutes);
   new seconds = str_to_num(_seconds);
   new month = str_to_num(_month);
   new day = str_to_num(_day);
   new year = str_to_num(_year);
  
   minutes 
+= minutes;
   
   
// while( minutes >= 60 )
   // {
   //   minutes -= 60;
   //   hours++;
   // }
   
   hours 
+= minutes / 60
   minutes 
= minutes % 60
    
  
// while( hours >= 24 )
  // {
  //   hours -= 24;
  //   day++;
  //}
    
  day 
+= hours / 24
  hours 
= hours % 24
    
  new max_days 
= GetDaysInMonth(month, year);
  
  
// while( day > max_days )
  // {
  //   day -= max_days;
  //   month++;
  // }
  
  month 
+= day / max_days
  day 
= day % max_days
    
  
// while( month > 12 )
  // {
  //   month -= 12;
  //   year++;
  // }
  
  year 
+= month / 12
  month 
= month % 12
   
   
  formatex
(dday, len1, "%i", day);
  formatex(mmonth, len2, "%i", month);
  formatex(yyear, len3, "%i", year);
   
  
//formatex(unban_time, len, "%i:%02i:%02i %i/%i/%i", hours, minutes, seconds, month, day, year);
  //formatex(unban_time, len, "%i.%i.%i", day, month, year);
  
}

GetDaysInMonth(month, year=0)
{
   switch( month )
   {
      case 1:      return 31; // january
      case 2:      return ((year % 4) == 0) ? 29 : 28; // february
      case 3:      return 31; // march
      case 4:      return 30; // april
      case 5:      return 31; // may
      case 6:      return 30; // june
      case 7:      return 31; // july
      case 8:      return 31; // august
      case 9:      return 30; // september
      case 10:   return 31; // october
      case 11:   return 30; // november
      case 12:   return 31; // december
   }
   
   return 30
;
}
 


Добавлено спустя 20 минут 43 секунды:
hren_morjovui,
такой формат не подходит 04/02/2003
для вычислений надо 4/2/2003 и без / / /

Добавлено спустя 57 минут 8 секунд:
Leonidddd,
не до конца разобрался похоже в секунды можно дапу перевести
а как в часы можешь пример привести
или мой пример поправить что лучше
слава великой сонтаранской империи !
Аватара пользователя
RSO_
 
Сообщения: 58
Зарегистрирован: 20 окт 2019, 21:40
Откуда: от верблюда
Благодарил (а): 19 раз.
Поблагодарили: 1 раз.
Опыт программирования: Меньше недели
Языки программирования: . . . 100 ISQ

Re: условия найти день месяц год

Сообщение Leonidddd » 18 ноя 2019, 22:04

RSO_,
Хм, из своего кода:

Код: Выделить всё
    new CurrentTime[64];
    get_time("%H:%M:%S %m:%d:%Y",CurrentTime,charsmax(CurrentTime));
    g_CurrTimeStamp = parse_time(CurrentTime, "%H:%M:%S %m:%d:%Y"); 


Код: Выделить всё
        new g_FinTimeStamp;

        g_FinTimeStamp = parse_time(g_FinTime, "%H:%M:%S %m:%d:%Y");

        if(g_CurrTimeStamp < g_FinTimeStamp || equal(g_FinTime, "-1")){

            //set_user_flags(id, read_flags("abcdefghijklmnopqrstu"))
        

Где g_FinTime - это значение получается из файла при помощи парсинга, примерно в таком формате: "19:05:00 01/14/2019", я привык к забугорному стилю, поэтому, внимательнее, у меня там после времени не со дня, а месяца начинается. Ну или "-1", если хочу навсегда выдать. Полагаю, принцип проверки предельно яснее.
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2259
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 182 раз.
Поблагодарили: 632 раз.

Re: условия найти день месяц год

Сообщение RSO_ » 19 ноя 2019, 00:10

благодарю конечно но я в библиотеке 7 цыклов насчитал
думаю для моих нужд столько не надо умножениям и делениям обойдусь :-)
слава великой сонтаранской империи !
Аватара пользователя
RSO_
 
Сообщения: 58
Зарегистрирован: 20 окт 2019, 21:40
Откуда: от верблюда
Благодарил (а): 19 раз.
Поблагодарили: 1 раз.
Опыт программирования: Меньше недели
Языки программирования: . . . 100 ISQ

Re: условия найти день месяц год

Сообщение hren_morjovui » 19 ноя 2019, 10:34

так а в чём проблема, записывай всё в UNIX после точки с запятой, а проверку делать когда игрок заходит на сервер ну можно ещё и для себя меню отдельное прикрутить где будет показывать ник, флаги и "срок годности" и возможность удаления если "просрочен".
"В этом мире неизбежны три вещи: смерть, налоги и гравитация."
Аватара пользователя
hren_morjovui
 
Сообщения: 111
Зарегистрирован: 29 май 2018, 09:15
Благодарил (а): 55 раз.
Поблагодарили: 14 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
PHP
jQuery

Re: условия найти день месяц год

Сообщение RSO_ » 19 ноя 2019, 22:31

так а в чём проблема, записывай всё в UNIX после точки с запятой, а проверку делать когда игрок заходит на сервер


а есть рабочий пример
слава великой сонтаранской империи !
Аватара пользователя
RSO_
 
Сообщения: 58
Зарегистрирован: 20 окт 2019, 21:40
Откуда: от верблюда
Благодарил (а): 19 раз.
Поблагодарили: 1 раз.
Опыт программирования: Меньше недели
Языки программирования: . . . 100 ISQ

Re: условия найти день месяц год

Сообщение hren_morjovui » 22 ноя 2019, 11:57

RSO_ писал(а):
так а в чём проблема, записывай всё в UNIX после точки с запятой, а проверку делать когда игрок заходит на сервер


а есть рабочий пример


пока нету :( как буду для себя делать, то скину заодно и сюда, но когда это будет хз) Да и наверное что-то подобное уже кто-то написал... сейчас в интернете практически всё можно найти)
"В этом мире неизбежны три вещи: смерть, налоги и гравитация."
Аватара пользователя
hren_morjovui
 
Сообщения: 111
Зарегистрирован: 29 май 2018, 09:15
Благодарил (а): 55 раз.
Поблагодарили: 14 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
PHP
jQuery

След.

Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3