Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 15

Тема: TimeConvert

  1. #1
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±

    UnixTimeConvert

    Описание:

    Выводит сколько времени прошло или осталось до переданного UNIX времени. Конвертирует, если меньше года, то выводит в месяцах, или если меньше месяца, то в днях и так далее до секунды


    Функция:

      Открыть/закрыть
    PHP код:
    #if !defined UNIX_MINUTE
        
    const UNIX_MINUTE 60;
    #endif
    #if !defined UNIX_HOUR
        
    const UNIX_HOUR UNIX_MINUTE*60;
    #endif
    #if !defined UNIX_DAY
        
    const UNIX_DAY UNIX_HOUR*24;
    #endif
    #if !defined UNIX_MONTH
        
    const UNIX_MONTH UNIX_DAY*30;
    #endif
    #if !defined UNIX_YEAR
        
    const UNIX_YEAR UNIX_MONTH*12;
    #endif

    stock UnixTimeConvert(array[], timestamparray_size sizeof(array))
    {
        if(
    array_size 14)
            return 
    0;
        array[
    0] = EOS;
        new 
            
    compare gettime(), 
            
    time = (timestamp compare) ? 
            (
    timestamp compare) : (compare timestamp), remainder;
        if(
    time UNIX_MINUTE)
        {
            
    remainder time;
            if((
    remainder %= 100) > 19)
                
    remainder %= 10;
            switch(
    remainder)
            {
                case 
    1:
                    
    strcat(array, "секунда"array_size);
                case 
    234:
                    
    strcat(array, "секунды"array_size);
                default:
                    
    strcat(array, "секунд"array_size);
            }
        }
        else if(
    time UNIX_HOUR)
        {
            
    remainder time time UNIX_MINUTE;
            if((
    remainder %= 100) > 19)
                
    remainder %= 10;
            switch(
    remainder)
            {
                case 
    1:
                    
    strcat(array, "минута"array_size);
                case 
    234:
                    
    strcat(array, "минуты"array_size);
                default:
                    
    strcat(array, "минут"array_size);
            }
        }
        else if(
    time UNIX_DAY)
        {
            
    remainder time time UNIX_HOUR;
            if((
    remainder %= 100) > 19)
                
    remainder %= 10;
            switch(
    remainder)
            {
                case 
    1:
                    
    strcat(array, "час"array_size);
                case 
    234:
                   
    strcat(array, "часа"array_size);
                default:
                    
    strcat(array, "часов"array_size);
            }
        }
        else if(
    time UNIX_MONTH)
        {
            
    remainder time time UNIX_DAY;
            if((
    remainder %= 100) > 19)
                
    remainder %= 10;
            switch(
    remainder)
            {
                case 
    1:
                    
    strcat(array, "день"array_size);
                case 
    234:
                    
    strcat(array, "дня"array_size);
                default:
                    
    strcat(array, "дней"array_size);
            }
        }
        else if(
    time UNIX_YEAR)
        {
            
    remainder time time UNIX_MONTH;
            if((
    remainder %= 100) > 19)
                
    remainder %= 10;
            switch(
    remainder)
            {
                case 
    1:
                    
    strcat(array, "месяц"array_size);
                case 
    234:
                    
    strcat(array, "месяца"array_size);
                default:
                    
    strcat(array, "месяцев"array_size);
            }
        }
        else
        {
            
    remainder time time UNIX_YEAR;
            if((
    remainder %= 100) > 19)
                
    remainder %= 10;
            switch(
    remainder)
            {
                case 
    1:
                    
    strcat(array, "год"array_size);
                case 
    234:
                    
    strcat(array, "года"array_size);
                default:
                    
    strcat(array, "лет"array_size);
            }
        }
        
    format(array, array_size"%d %s"time, array);
        return 
    1;



    Параметры:

    • array[] - массив в который будет записан результат.
    • timestamp - UNIX время для вычисление.
    • array_size - не обязательный параметр, настроен по умолчанию.



    Возвращаемые значения:

    • 1 - функция успешно выполнена.
    • 0 - функции не удалось выполниться. Размер массива для записи слишком маленький.



    Пример использования:

    PHP код:
    public OnGameModeInit()
    {
        new 
    time_left[14];
        
    UnixTimeConvert(time_leftgettime()+UNIX_DAY);
        
    printf("Внимание! До завтра остался %s"time_left);
        return 
    1;



    Автор: Я




    UPD:

    • Добавлены советы от Daniel_Cortez
    • Добавлены советы от ziggi
    • Изменено описание





    Последний раз редактировалось Geebrox; 16.11.2016 в 18:54.
    Респект:
    @DeimoS
    @ziggi
    @Daniel_Cortez

  2. 4 пользователя(ей) сказали cпасибо:
    BadPawn (14.11.2016) Desulaid (15.11.2016) Unreal (24.03.2019) VVWVV (16.11.2016)
  3. #2
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Не понимаю, почему размер задается цифрами? (не используя функцию sizeof)
    PHP код:
                case 1:
                    
    strcat(array, " секунда"9);
                case 
    234:
                    
    strcat(array, " секунды"9);
                default:
                    
    strcat(array, " секунд"8); 
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  4. #3
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Не понимаю, почему размер задается цифрами? (не используя функцию sizeof)
    PHP код:
                case 1:
                    
    strcat(array, " секунда"9);
                case 
    234:
                    
    strcat(array, " секунды"9);
                default:
                    
    strcat(array, " секунд"8); 
    Я думаю, потому что нет особого труда посчитать длину строки для 2 аргумента. При использовании sizeof будут выполнены лишние операции в функции strcat, так как размер array во много раз больше, чем длина строк во 2 аргументе.

  5. Пользователь сказал cпасибо:
    Geebrox (15.11.2016)
  6. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Не понимаю, почему размер задается цифрами? (не используя функцию sizeof)
    1. Это не функция.
    2. На аргументах функций sizeof работает только для значений по умолчанию в перечислении аргументов:
    Код:
    stock UnixTimeConvert(array[], timestamp, array_size = sizeof(array))
    Тем не менее, причина использования каких-то цифр в strcat вместо размера массива (array_size) непонятна, есть шанс получить выход за пределы массива.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  7. Пользователь сказал cпасибо:
    Geebrox (15.11.2016)
  8. #5
    Аватар для Undertaker
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.11.2016
    Сообщений
    4
    Репутация:
    0 ±
    https://vk.com/propawnru?w=wall-36097695_4181%2Fall

    Совпадение? Нет, не совпадение.

    Автор: Undertaker
    Последний раз редактировалось Undertaker; 15.11.2016 в 21:01.

  9. #6
    Аватар для Pa4enka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2016
    Адрес
    Украина
    Сообщений
    157
    Репутация:
    35 ±
    Цитата Сообщение от Undertaker Посмотреть сообщение
    https://vk.com/propawnru?w=wall-36097695_4181%2Fall

    Совпадение? Нет, не совпадение.

    Автор: Undertaker
    Вы хотите сказать, что если автор темы взял идею для скрипта он нарушил авторские права? Ваш код, очень сильно отличается от кода, который нам предоставил автор темы. По этому говорить о авторском праве некорректно.

    (если я правильно понял суть замечания)
    Последний раз редактировалось Pa4enka; 15.11.2016 в 21:25. Причина: p.s

  10. Пользователь сказал cпасибо:
    Geebrox (15.11.2016)
  11. #7
    Аватар для Undertaker
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.11.2016
    Сообщений
    4
    Репутация:
    0 ±
     открыть/закрыть

    Карл, даже если я его релизнул, никакая наличие.txt лицензии, текст которого взят с интернета (шучу, даже если тобой написан) ни в каком суде не будет документом. Авторские права = патент, а патент за этот UnixTimeConvert никто не даст, даже за любой написанный ФуллРП мод также. ибо ты собираешься запатентовать то, что не существует (клоню к тому, что SAMP всего лишь пиратский мод).

     картиночка)0


    А теперь на счёт кода, там все расчеты взяты именно оттуда,инициализация массива. И strcat... ( Крч я забиваю на эту тему

    Если хочешь дальше продолжить нашу дискуссию, приглашаю в ЛС сюда или ВК, ибо не вижу смысла разводить оффтоп
    Последний раз редактировалось Undertaker; 15.11.2016 в 21:40.

  12. #8
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от Undertaker Посмотреть сообщение
    https://vk.com/propawnru?w=wall-36097695_4181%2Fall

    Совпадение? Нет, не совпадение.

    Автор: Undertaker
    И чего вы хотите добиться этим, хотите сказать что вы первым придумали такую функцию, не думаю



    могу скинуть оригинал переписки в лс, если этого не достаточно, может это вы взяли мою идею из других порталов, в которые я выкладывал эту функцию? Продолжим спор? Я с 100% уверенностью могу сказать, что сам лично писал каждую строчку этой функции.

    Цитата Сообщение от Undertaker Посмотреть сообщение
    Совпадение? Нет, не совпадение.
    Не говорите о чем либо, если не уверены, что вы правы. Сначала проверьте это! Я НИКОГДА еще не нарушал АП. Любой человек может думать как и вы и придумывать такие же идеи как и вы. Вы не один в этом мире или не отличаетесь чем-то от других людей.

    P.S. Прошу правообладателей рассмотреть мои репутации, что он без каких либо точных оснований понизил его.
    Последний раз редактировалось Geebrox; 15.11.2016 в 23:22.

  13. #9
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Undertaker Посмотреть сообщение
     открыть/закрыть

    Карл, даже если я его релизнул, никакая наличие.txt лицензии, текст которого взят с интернета (шучу, даже если тобой написан) ни в каком суде не будет документом. Авторские права = патент, а патент за этот UnixTimeConvert никто не даст, даже за любой написанный ФуллРП мод также. ибо ты собираешься запатентовать то, что не существует (клоню к тому, что SAMP всего лишь пиратский мод).

     картиночка)0


    А теперь на счёт кода, там все расчеты взяты именно оттуда,инициализация массива. И strcat... ( Крч я забиваю на эту тему

    Если хочешь дальше продолжить нашу дискуссию, приглашаю в ЛС сюда или ВК, ибо не вижу смысла разводить оффтоп
    Расчёты? Там же обычное деление на 60 и 24, будто в этом есть какая-то сложность...

    По поводу темы. Использовать valstr и strins довольно не безопасно. Можно всё заменит на format, ну или хотябы перед strcat'ами вызывать valstr, чтобы избавиться от вызова strins.

    А сама идея сомнительна, как показывает практика, часто бывает, что нужны другие формы слов (ох уж этот русский язык), например: "1 секундой ранее", "2 секундами ранее". Или вот: "Ждите 1 секунду".

    Ещё вычисления сомнительны, цикл здесь не нужен:
    PHP код:
            while(remainder 10 && remainder != 11)
                
    remainder remainder 10
    PHP код:
    remainder %= 100;
    if (
    remainder 19) {
        
    remainder %= 10;


  14. 2 пользователя(ей) сказали cпасибо:
    Geebrox (15.11.2016) Nash_Brigers (17.11.2016)
  15. #10
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Расчёты? Там же обычное деление на 60 и 24, будто в этом есть какая-то сложность...

    По поводу темы. Использовать valstr и strins довольно не безопасно. Можно всё заменит на format, ну или хотябы перед strcat'ами вызывать valstr, чтобы избавиться от вызова strins.

    А сама идея сомнительна, как показывает практика, часто бывает, что нужны другие формы слов (ох уж этот русский язык), например: "1 секундой ранее", "2 секундами ранее". Или вот: "Ждите 1 секунду".

    Ещё вычисления сомнительны, цикл здесь не нужен:
    PHP код:
            while(remainder 10 && remainder != 11)
                
    remainder remainder 10
    PHP код:
    remainder %= 100;
    if (
    remainder 19) {
        
    remainder %= 10;

    Учту, как будет время поправлю. Но в принципе функция вычисляет, сколько прошло или осталось. Поправлю описание тоже.
    Последний раз редактировалось Geebrox; 15.11.2016 в 23:36.

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •