И вот первый же вопрос, который я сам себе задал – если я планирую (а я планирую), что игра будет многопользовательская – то необходимо, чтобы «игровое время» происходило на сервере, а не у пользователя (иначе будут нестыковки). Это, собственно, к слову, и стало причиной почему я игру захотел писать на 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, 21 Nov 2024 11:41:48 +0300" |
s | секунды | "00" до "59" |
S | Английское окончание в зависимости от даты | "th" или "nd" |
t | количество дней в текущем месяце | "28" до "31" |
T | Часовой пояс установленный на машине | "MDT" |
U | количество секунд с начало века | "1732178508" |
w | день недели, числовой | "0"(Воскресенье) до "6"(Суббота) |
Y | год, 4 цифры | "2024" |
y | год, 2 цифры | "24" |
z | день в году | "0" до "365" |
Z | часовой пояс от Гринвича в секундах, для запада отрицательная, для востока положительная. | "-43200" до "43200" |
Пример использования функции:
<?php print( date("H:i:s")); ?>
На выходе имеем вывод текущего времени на сервере:
11:41:48
Собственно, меня кроме этих значений особо ничего другое и не интересует на данном этапе, однако приведу ещё один пример из практики с которой сам лично ранее сталкивался. Допустим у Вас появилась необходимость сделать какой-либо материал доступным в какой-то определённый промежуток времени. Например, у Вас проводится какой-то конкурс, который имеет начало в определённый день и в определённое время и должен прекратиться в другой день и соответственно в другое (или даже в то же) время.
Начнём с того, что нас интересует конкретный день, следовательно мы опираемся, как минимум на число. Допустим у нас конкурс должен был быть 20 мая 2020-го. Пишем условие:
<?php if(date("d.m.Y") == "20.05.2020") {print('Началось');} ?>
Конечно, вместо print('Началось'); будет либо некий код, либо, как в моём случае - функция include(); подгрузившая уже готовую викторину, которая только и ждала своего часа.