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

    Статус
    Оффлайн
    Регистрация
    21.07.2017
    Сообщений
    46
    Репутация:
    0 ±

    Раз и навсегда решение с gettime()

    Есть проблема у меня, но я решал её не особо, просто минусовал 1 день.

    Суть: у меня gettime работает как-то неправильно. Например если я купил випку, или выдал бан на день, или вообще насколько бы дней не выдал. Всегда прибавляется +1 день. В коде все правильно делаю

    я берю gettime() + 86400*params[] (это 1 день которая умножаю на то число которое ввожу при бане или при покупке випки), глянул mxdate особо не разобрал код не вникал но там прочел описание типа считает все с 1970 ну когда unix начиналолсь или как там.

    Можете помочь с проблемой, там ещё и секунды неправильно показывает если что. Когда выдал unix время он в бд записуется. Потом я открываю онлайн калькулятор в гугле по расчету юникс времени. Там не правильно показывает. Не ту дату которую я указал.

    По сути gettime должен типа считать с компьютера время я так понял с которого ты запускаешь samp exe или как то так.

  2. #2
    Аватар для Betta
    Пользователь

    Статус
    Оффлайн
    Регистрация
    18.08.2017
    Сообщений
    20
    Репутация:
    0 ±
    Скорее всего ты берешь не ту ячейку params. К примеру у тебя в моде стоит:

    sscanf(params, "ii", params[0], params[1]) где 0 = ид игрока, 1 дни бана. Ты берешь 0 и тебя всегда блокирует на один день, так как ты указываешь свой ид для проверки. Если проблема не в этом (проверь) то скинь сюда функцию блокировки и команду.
    Последний раз редактировалось Betta; 23.09.2017 в 16:34.

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

    Статус
    Оффлайн
    Регистрация
    26.12.2016
    Адрес
    Беларусь
    Сообщений
    41
    Репутация:
    1 ±
    Рекомендую использовать time_t от ziggi. У меня так же были проблемы с расчётом времени, поэтому в начале функции gmtime я прибавляю 10800:
    PHP код:
    timestamp += 10800
    А в функции mktime уменьшаю возращаемое значение на 10800:
    PHP код:
    return seconds 10800
    Ты так же выщитываешь погрешность и уменьшаешь / увеличиваешь значение.
    Последний раз редактировалось Mr_LemoneZ; 23.09.2017 в 16:42.

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

    Статус
    Оффлайн
    Регистрация
    21.07.2017
    Сообщений
    46
    Репутация:
    0 ±
    Цитата Сообщение от Betta Посмотреть сообщение
    Скорее всего ты берешь не ту ячейку params. К примеру у тебя в моде стоит:

    sscanf(params, "ii", params[0], params[1]) где 0 = ид игрока, 1 дни бана. Ты берешь 0 и тебя всегда блокирует на один день, так как ты указываешь свой ид для проверки. Если проблема не в этом (проверь) то скинь сюда функцию блокировки и команду.
    ты вопроса не понял, либо я непонятно написал. Дело не в том что я при каждом моем значении автоматический равняется 0 или 1. Там кроме моих данных всегда +1 ложит. Если туда ещё секунды показывать они тоже не точное время показывают

    - - - Updated - - -

    Цитата Сообщение от Mr_LemoneZ Посмотреть сообщение
    Рекомендую использовать time_t от ziggi. У меня так же были проблемы с расчётом времени, поэтому в начале функции gmtime я прибавляю 10800:
    PHP код:
    timestamp += 10800
    А в функции mktime уменьшаю возращаемое значение на 10800:
    PHP код:
    return seconds 10800
    Ты так же выщитываешь погрешность и уменьшаешь / увеличиваешь значение.
    Можно по подробнее. Как там расчет делается. Например тот же /c 060 как на адвансе делают в точности как на моем компьютере. Я верю что есть другое решение без всего этого вычесления. Варианты ещё пишите (Это уже не к вам именно обращение)

  5. #5
    Аватар для Mr_LemoneZ
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.12.2016
    Адрес
    Беларусь
    Сообщений
    41
    Репутация:
    1 ±
    Цитата Сообщение от Hecf Посмотреть сообщение
    Можно по подробнее. Как там расчет делается. Например тот же /c 060 как на адвансе делают в точности как на моем компьютере. Я верю что есть другое решение без всего этого вычесления. Варианты ещё пишите (Это уже не к вам именно обращение)
    Например, если при вычислении времени у тебя получается на 3 часа позже, как в моём случае, ибо мой часовой пояс GMT+3 (23.09.2017 15:30:00, вместо 23.09.2017 18:30:00), то, соответственно, в функции gmtime библиотеки time_t ты прибавляешь к передаваемому времени 10800 секунд (60 * 60 * 3), а в функции mktime отнимаешь у возвращаемого значения 10800.

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

    Статус
    Оффлайн
    Регистрация
    21.07.2017
    Сообщений
    46
    Репутация:
    0 ±
    Цитата Сообщение от Mr_LemoneZ Посмотреть сообщение
    Например, если при вычислении времени у тебя получается на 3 часа позже, как в моём случае, ибо мой часовой пояс GMT+3 (23.09.2017 15:30:00, вместо 23.09.2017 18:30:00), то, соответственно, в функции gmtime библиотеки time_t ты прибавляешь к передаваемому времени 10800 секунд (60 * 60 * 3), а в функции mktime отнимаешь у возвращаемого значения 10800.
    А это в самом инклуде прописать типа.. а он типа gettime заменяет какой функцией?

  7. #7
    Аватар для Mr_LemoneZ
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.12.2016
    Адрес
    Беларусь
    Сообщений
    41
    Репутация:
    1 ±
    Цитата Сообщение от Hecf Посмотреть сообщение
    А это в самом инклуде прописать типа.. а он типа gettime заменяет какой функцией?
    Да, в самой библиотеке. gettime он не заменяет, ты просто передаёшь функции gmtime время в unix-формате, которое ты как раз и получаешь с помощью gettime, после чего он это время конвертирует в читаемую простым смертным дату и время.

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

    Статус
    Оффлайн
    Регистрация
    21.07.2017
    Сообщений
    46
    Репутация:
    0 ±
    Цитата Сообщение от Mr_LemoneZ Посмотреть сообщение
    Да, в самой библиотеке. gettime он не заменяет, ты просто передаёшь функции gmtime время в unix-формате, которое ты как раз и получаешь с помощью gettime, после чего он это время конвертирует в читаемую простым смертным дату и время.
    тогда заебца спс, ща чекну и где ты приравниваешь +10800 я так и не понял в коде сморел gmtime но там нет типа timestamp = чему то я о инклуде если шо

    - - - Updated - - -

    Цитата Сообщение от Hecf Посмотреть сообщение
    тогда заебца спс, ща чекну и где ты приравниваешь +10800 я так и не понял в коде сморел gmtime но там нет типа timestamp = чему то я о инклуде если шо
    Всё равно я не совсем понял как пользоваться mtime я вообще сложный человек с другой логикой мышления. Помоги как понять ааааа

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

    Статус
    Оффлайн
    Регистрация
    26.12.2016
    Адрес
    Беларусь
    Сообщений
    41
    Репутация:
    1 ±
    Цитата Сообщение от Hecf Посмотреть сообщение
    ща чекну и где ты приравниваешь +10800 я так и не понял в коде сморел gmtime но там нет типа timestamp = чему то я о инклуде если шо
    Находишь в библиотеке функцию gmtime и сразу, в начале этой функции, перед строкой static dayclock; прибавляешь свою погрешность в секундах:
    PHP код:
    timestamp += 10800
    Всё.

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Mr_LemoneZ Посмотреть сообщение
    Находишь в библиотеке функцию gmtime и сразу, в начале этой функции, перед строкой static dayclock; прибавляешь свою погрешность в секундах:
    PHP код:
    timestamp += 10800
    Всё.
    Так-себе решение. Лучше не менять библиотеку, хранить всё время без часового пояса, и только при выводе прибавлять часовой пояс.

  11. 2 пользователя(ей) сказали cпасибо:
    Argument (23.09.2017) Mr_LemoneZ (24.09.2017)
 

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

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

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

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

Ваши права

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