Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Урок Использование UNIX-времени

Статус
В этой теме нельзя размещать новые ответы.
Как использовать UNIX-время.
Автор туторила: __ . Автор перевода: Ross
Оригинальная статья:

Введение:
Не многие понимают насколько полезным может оказаться использование UNIX-времени, именно для этого, я написал свой туториал.

Содержание учебного материала:
Введение
Содержание учебного материала
Что такое UNIX-время.
Почему, когда и как вы должны его использовать.
Полезные вычисления.
Расшифровка UNIX-времени.


Что такое UNIX-время:
UNIX-время (англ. Unix time) или POSIX-время — система описания моментов во времени, принятая в UNIX и других POSIX-совместимых операционных системах. Определяется как количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года (четверг); время с этого момента называют «эрой UNIX» (англ. Unix Epoch).
Использование UNIX-времени очень полезно во множестве скриптов.

Несмотря на простоту использования UNIX-времени, некоторые скрипты до сих пор используют более сложные и менее эффективные методы. Например, хранение часов, минут, секунд и лет и попытки их вычисления с помощью переменных, вместо того, чтобы использовать UNIX-время, использование которого было бы намного эффективнее.

Пример UNIX-времени:
1305302089

Почему, когда и как вы должны использовать UNIX-время:
Как вы можете использовать UNIX-время:
Пример: Временная VIP - довольно частая функция на многих серверах. Администратор, временно, может выдать кому-то специальное звание, после истечения определенного промежутка времени звание забирается и закрывается доступ к использованию каких-либо функций.

Код для этого примера вы можете найти здесь. Обратите внимание, что код не был протестирован - он был лишь скомпилирован.

Использование UNIX-времени очень эффективно в PAWN. Использование gettime() без каких-либо параметров возвращает UNIX-время.

Почему вы должны использовани UNIX-время:
В чем смысл создания нескольких переменных, когда это не нужно? Все, что вам действительно нужно, это одно длинное целое число.

Когда вы должны использовать UNIX-время:
Я написал краткий список, где можно использовать UNIX-время. Стоит отметить, что существует много других примеров для использования UNIX-времени:
Временная VIP
Временные дома
Временные бизнеса
Временный администратор
И многие другие...


Некоторые полезные вычисления:
Результаты данных вычислений следует прибавлять к gettime():

1 минута (60 секунд) = 60 * 1 = 60
2 минуты (120 секунд) = 60 * 2 = 120

1 час (60 минут) = 60 * 60 = 3600
2 часа (120 минут) = 60 * 120 = 7200

1 день (24 часа) = 60 * 60 * 24 = 86400
2 дня (48 часов) = 60 * 60 * 48 = 172800

1 неделя (7 дней) = 60 * 60 * 24 * 7 = 604800
2 недели (14 дней) = 60 * 60 * 24 * 14 = 1209600

1 месяц (30 дней) = 60 * 60 * 24 * 30 = 2592000
2 месяца (60 дней) = 60 * 60 * 24 * 60 = 5184000

1 год (365 дней) = 60 * 60 * 24 * 365 = 31536000
2 года (730 дней) = 60 * 60 * 24 * 730 = 63072000

Пример:
PHP:
new
   iTime = gettime() + 5184000; // 2 месяца.
Расшифровка UNIX-времени:
В PHP и некоторых других похожих языках, вы можете перевести UNIX-время в дату с использованием функции date(). К сожалению, в PAWN нет таких функций, с помощью которых это можно сделать.

Благодаря Blacklite, была сделана функция, позволяющая сравнить два времени (К примеру, время, которые вы сохранили и текущее время) для получения количества времени между сохранённым и нынешним.

Код функции:
PHP:
stock timec(timestamp, compare = -1) {
    if (compare == -1) {
        compare = gettime();
    }
    new
        n,
        // on the following line, I have removed the need for the diff() function.
        // if you want to use the diff() function in pawn, replace the following with:
        // Float:d = diff(timestamp, compare),
        Float:d = (timestamp > compare) ? timestamp - compare : compare - timestamp,
        returnstr[32];
    if (d < 60) {
        format(returnstr, sizeof(returnstr), "< 1 minute");
        return returnstr;
    } else if (d < 3600) { // 3600 = 1 hour
        n = floatround(floatdiv(d, 60.0), floatround_floor);
        format(returnstr, sizeof(returnstr), "minute");
    } else if (d < 86400) { // 86400 = 1 day
        n = floatround(floatdiv(d, 3600.0), floatround_floor);
        format(returnstr, sizeof(returnstr), "hour");
    } else if (d < 2592000) { // 2592000 = 1 month
        n = floatround(floatdiv(d, 86400.0), floatround_floor);
        format(returnstr, sizeof(returnstr), "day");
    } else if (d < 31536000) { // 31536000 = 1 year
        n = floatround(floatdiv(d, 2592000.0), floatround_floor);
        format(returnstr, sizeof(returnstr), "month");
    } else {
        n = floatround(floatdiv(d, 31536000.0), floatround_floor);
        format(returnstr, sizeof(returnstr), "year");
    }
    if (n == 1) {
        format(returnstr, sizeof(returnstr), "1 %s", returnstr);
    } else {
        format(returnstr, sizeof(returnstr), "%d %ss", n, returnstr);
    }
    return returnstr;
}
Теоретически, эту функцию можно использовать так (Мною она проверена не была):

PHP:
new
   iRandomTime = gettime()-86402; // Из нынешнего времени вычитаем 24 часа и 2 секунды
   szMessage[64];
 
format(szMessage, sizeof(szMessage), "It has been: %s", timec(iRandomTime)); // Записываем в szMessage, сколько времени прошло с тех пор, как мы объявили iRandomTime
print(szMessage); // Выводим szMessage
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу