оригинальная версия версия для слабовидящих контрастная версия выключить изображения включить изображения RSS FEED K2 NEWS
Среда, 20 Май 2020 05:18

PHP – Серверное время

Появилось желание (давно уже), написать свою онлайн-игру, и вот решил-таки от желания перейти к «поступкам» (типо времени дофига свободного, ага – это был сарказм). А параллельно описывать вопросы, с которыми сталкиваюсь.

И вот первый же вопрос, который я сам себе задал – если я планирую (а я планирую), что игра будет многопользовательская – то необходимо, чтобы «игровое время» происходило на сервере, а не у пользователя (иначе будут нестыковки). Это, собственно, к слову, и стало причиной почему я игру захотел писать на php (или хотя бы с использованием пыхи), к моему сожалению node.js я так хорошо не знаю, как надо было бы – вполне допускаю, что правильнее было бы писать именно на нём, но в то же время, node.js появился далеко не вчера – а ничего «революционного» на нём так и не сделали.

А потому вернулся я к старенькой добренькой пыхе, которая, хотя бы знаю, что из себя представляет. Итак «серверное время». В данном случае меня будет интересовать функция date(); которая возвращает строку и принимает аргументы format (строка) и time stamp (целое число) - необязательный аргумент:

string date (string format [, int timestamp]);

Ниже таблица с представленными аргументами аргумента format:

Параметр Описание Возвращает
a нижний регистр, выводит pm или am, в зависимости от времени "am" или "pm"
A верхний регистр, выводит PM или AM, в зависимости от времени "AM" или "PM"
d текущий день, 2 цифры с первым ноль от "01" до "31"
F месяц, полное название тестом "January"
g часы, 12-часовой формат, без первого нуля "1" до "12"
G часы, 24-часовой формат, без первого нуля "0" до "24"
h часы, 12-часовой формат, первый ноль "01" до "12"
H часы, 24-часовой формат, первый ноль "00" до "24"
i минуты "00" до "59"
I (заглавная i) 1, если день, 0 если ночь "1" или "0"
j текущий день, 2 цифры без первого нуля от "1" до "31"
l (маленькая L) день недели, полное название текстом "Thursday"
L 1 - високосный год, 0 в остальных случаях "1" или "0"
m месяц, первый ноль "01" до "12"
M месяц, 3 первые буквы названия "Jan"
n месяц без первого нуля "1" до "12"
r формат вывода даты и времени RFC 822 "Thu, 01 Oct 2020 16:29:44 +0300"
s секунды "00" до "59"
S Английское окончание в зависимости от даты "th" или "nd"
t количество дней в текущем месяце "28" до "31"
T Часовой пояс установленный на машине "MDT"
U количество секунд с начало века "1601558984"
w день недели, числовой "0"(Воскресенье) до "6"(Суббота)
Y год, 4 цифры "2020"
y год, 2 цифры "20"
z день в году "0" до "365"
Z часовой пояс от Гринвича в секундах, для запада отрицательная, для востока положительная. "-43200" до "43200"

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

<?php print( date("H:i:s")); ?>

На выходе имеем вывод текущего времени на сервере:

16:29:44

Собственно, меня кроме этих значений особо ничего другое и не интересует на данном этапе, однако приведу ещё один пример из практики с которой сам лично ранее сталкивался. Допустим у Вас появилась необходимость сделать какой-либо материал доступным в какой-то определённый промежуток времени. Например, у Вас проводится какой-то конкурс, который имеет начало в определённый день и в определённое время и должен прекратиться в другой день и соответственно в другое (или даже в то же) время.

Начнём с того, что нас интересует конкретный день, следовательно мы опираемся, как минимум на число. Допустим у нас конкурс должен был быть 20 мая 2020-го. Пишем условие:

<?php if(date("d.m.Y") == "20.05.2020") {print('Началось');} ?>

Конечно, вместо print('Началось'); будет либо некий код, либо, как в моём случае - функция include(); подгрузившая уже готовую викторину, которая только и ждала своего часа.

Спонсоры: