Всем доброго времени суток. Решил переписать систему банов, и сделать ее на unix (как минимум потому что это удобно). Есть ли какая та функция, которая переводит unix время в обычную дату? Заранее спасибо!
Всем доброго времени суток. Решил переписать систему банов, и сделать ее на unix (как минимум потому что это удобно). Есть ли какая та функция, которая переводит unix время в обычную дату? Заранее спасибо!
Я, возможно, чего-то не понимаю, но чем Unix время удобнее обычного? Не проще ли в таблице хранить дату разбана в виде обычной даты, а уже там, где нужно возвращать UNIX время, возвращать его средствами MySQL?
Как пример:
MySQL сама переведёт дату в соответствующее время (единственное: тип столбца должен быть, соответственно, рассчитан на хранение даты. "TIMESTAMP", например).PHP код:
SELECT UNIX_TIMESTAMP(`unban_date`) FROM `ban`
Да и вообще, советую изучить эту статью и научиться хоть чуть-чуть работать с функционалом MySQL, чтоб сделать действительно удобную систему.
Например, дату разбана можно оформить так:
А проверку на то, подошло ли время разбана, можно оформить так:PHP код:
INSERT INTO `ban`(`unban_date`) VALUES (NOW()+INTERVAL 17 DAY)//Разбан через 17 дней
Запрос вернёт 1, если игрок забанен.PHP код:
SELECT 1 FROM `banip` WHERE `unban_date`-NOW() > 0
Можно так же вернуть время до разбана. Примеры запросов показаны тут.
И это лишь самый примитивный вариант. Углубись в изучение MySQL. С этими знаниями ты в разы упростишь себе жизнь
- - - Добавлено - - -
Ну и ответ на твой вопрос:
Да, есть. Не нативные, но есть. Есть даже целые библиотеки с готовыми функциями. Одна из них - клик
Последний раз редактировалось DeimoS; 05.11.2020 в 13:53.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Я сделал так:
Записал дату в время в переменную в БД, и дату РАЗБАНА UNIX time.
И получается вывел так:
Дата бана: %date
Разбан через: %s
Пример:
Под переменной timeban подразумевается дата РАЗБАНА в UNIX формате.PHP код:
new string[64];
strcat(string,"Разбан через:\t\t");
if(timeban == -1)
strcat(string,"Никогда");
else
strcat(string,timec(timeban));
print(string);
И если timeban равра -1, то бан перманентный.
Последний раз редактировалось Alpano; 05.03.2017 в 19:47.
MyProject:
DriftEmpire©
Ленивые всё делают быстро, чтобы поскорее избавиться от работы.
И делают качественно, чтобы потом не переделывать.
NOW() замени на число из gettime. У тебя просто MySQL-сервер в другой временной зоне запущен.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Выводит NULL
MySQL-сервер у меня Denwer. NOW() совпадает с тем временем, что у меня.
Тут не нужна отладка в виде сервера, достаточно теста через SQL в phpMyAdmin.
UPD:
Работает корректно, а вот FROM_UNIXTIME какой-то неадекватный.PHP код:
WHERE `unban_date`-NOW()
2UPD:
Ну конечно...
Таким образом мы не получим вычисление оставшегося времени из разницы.
Функция просто выдаёт нам дату (начиная с 1 января 1970), а не выводит разницу словами.
То есть в том случае, который я выше описал, у меня было 1 января 4 часа ночи...
Последний раз редактировалось speeyx; 01.11.2020 в 22:21.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
А, теперь понял о чём идёт речь. Да, я там странную реализацию предложил, которая работать не будет.
Но подобное всё равно можно вычислить на стороне MySQL.
Можно сразу готовую строку вернуть:
SELECT CONCAT_WS('д. ', FLOOR((UNIX_TIMESTAMP(`unban_date`)-UNIX_TIMESTAMP(NOW()))/86400), sec_to_time(MOD(UNIX_TIMESTAMP(`unban_date`)-UNIX_TIMESTAMP(NOW()), 86400))) as unban_time FROM `ban`
Либо просто отдельно оставшееся число дней/часов/минут/секунд
SELECT FLOOR((UNIX_TIMESTAMP(`unban_date`)-UNIX_TIMESTAMP(NOW()))/86400) AS unban_days, FLOOR((UNIX_TIMESTAMP(`unban_date`)-UNIX_TIMESTAMP(NOW()))%86400/3600) AS unban_hours, FLOOR((UNIX_TIMESTAMP(`unban_date`)-UNIX_TIMESTAMP(NOW()))%86400%3600/60) AS unban_min, FLOOR((UNIX_TIMESTAMP(`unban_date`)-UNIX_TIMESTAMP(NOW()))%86400%3600%60) AS unban_min FROM `ban`
Оба запроса хоть и выглядят громоздкими, но вычисления в них будут выполняться за тысячные доли секунды.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
speeyx (06.11.2020)
Используй библиотеку time_t by ziggi.
Так-же, для удобства можно немного изменить код в библиотеке, ибо она возвращает время по Гринвичу (UTC+0), а все хостинги расположены в основном в Москве (UTC+3), поэтому нужно конвертировать, а именно:
Добавить константу:
#define TIME_UTC 3 // Moscow time
Добавить в начало функции gmtime:
timestamp += TIME_UTC*3600;
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)