Статья

Как приручить время в Sngine: Весёлый гайд по смене часового пояса

1. Почему ваша соцсеть живёт в прошлом (или будущем)

Итак, Вы установили Sngine, настроили логотип, добавили первых друзей (кота и соседа), и вдруг замечаете: посты уходят в завтра, комментарии приходят из вчера, а сервер, кажется, завис где-то на Бермудах.

Спокойствие. Это не баг, а фича времени. Просто Sngine по умолчанию живёт в UTC - универсальном координированном времени, которое хорошо для ракет и спутников, но странно для «ВКонтакте с шашлыками».

💡 Весёлый факт: UTC не меняется на летнее/зимнее время. Оно как очень ответственный сотрудник — всегда на месте. Но ваши пользователи хотят видеть «Ольга ответила 5 минут назад», а не «Ольга ответила в 02:34 UTC».


2. Магия «2 часа назад» — как Sngine обманывает время

В отличие от жёстких систем, Sngine — хитрец. Он не говорит «опубликовано в 14:00 по Москве». Он говорит: «опубликовано 2 часа назад» — прямо как Вконтакте или все модные ребята, которые запрещены быть упомянутыми.

Как это работает? Очень умно:

  • Серверная часть (PHP) смотрит на UTC.
  • Фронтенд (JavaScript) тоже смотрит на UTC.
  • А потом JS вычисляет разницу между временем поста и часовым поясом браузера пользователя.

Поэтому вам не нужно менять системное время сервера! Вы просто скажете Sngine: «Слушай, я тут из Москвы (или с Камчатки, или даже с Марса) — поставь-ка мой пояс по умолчанию».


3. Где живут настройки: два тайных убежища

Всего два файла — и вы повелитель времени.

Файл Что делает
includes/functions.php Глобальный PHP-пояс для всего бэкенда
includes/assets/js/sngine/core.js JS-настройка для красивых относительных дат

Без паники, они простые как лопата.


4. Меняем часовой пояс: пошаговый квест

Шаг 1. Находим свой часовой пояс

Загляните в официальный список PHP:

👉 https://www.php.net/manual/en/timezones.php

Примеры для России и не только:

  • Europe/Moscow — Москва, Питер, Волгоград (UTC+3)
  • Europe/Samara — Самара (UTC+4)
  • Asia/Yekaterinburg — Екатеринбург (UTC+5)
  • Asia/Novosibirsk — Новосибирск (UTC+7)
  • Asia/Vladivostok — Владивосток (UTC+10)
  • America/New_York — для друга из США
  • Asia/Dubai — для нефтяного магната

Шаг 2. Лезем в functions.php

Открываете файл includes/functions.php. Ищете строку, похожую на:

date_default_timezone_set('UTC');

Заменяете 'UTC' на ваш пояс, например:

date_default_timezone_set('Europe/Moscow');

⚠️ Важно: если этой строки нет — добавьте её в самое начало файла, после <?php.

Шаг 3. Пляшем с core.js

Файл: includes/assets/js/sngine/core.js. Ищете внутри слово utcOffset. Будет что-то вроде:

utcOffset: 0

Меняете на нужное смещение в часах от UTC. Например, для Москвы (UTC+3):

utcOffset: 3

Для Нью-Йорка (зимой UTC-5):

utcOffset: -5

📌 Лайфхак: смещение можно не трогать, если вы хотите, чтобы время определялось автоматически по браузеру пользователя. Но если все ваши пользователи из одного региона — лучше задать явно.

Шаг 4. Очищаем кэш

Сделайте вот что:

  1. Очистите кэш в админке Sngine (Админ-панель → Инструменты → Уборщик мусора → Удаление скомпилированных файлов шаблонов).
  2. Перезагрузите веб-сервер (Apache или Nginx) — обычно через sudo systemctl restart nginx или через панель хостинга.
  3. Откройте ваш сайт в режиме инкогнито (чтобы старые JS-файлы не кэшировались браузером).

Шаг 5. Проверяем

Создайте тестовый пост и посмотрите, сколько времени прошло. Если всё правильно — будет написано «только что» или «1 минуту назад». Если нет — не ругайтесь, просто вернитесь к шагу 2.


5. Полезные плюшки от профи (и чуть-чуть от меня)

Вот что можно ещё сделать, чтобы время работало как швейцарские часы (даже если вы не в Швейцарии):

Проблема Решение
Посты скачут при летнем времени Sngine не поддерживает DST автоматически. Но если задать utcOffset с учётом сезона — будет ок. Лучше оставить автоопределение по браузеру.
Сервер в одном часовом поясе, а все пользователи в другом Не меняйте functions.php на пользовательский! Оставьте UTC. Меняйте только core.js или вообще ничего не меняйте — JS сам подтянет пояс.
Хочу показывать абсолютное время (14:30) вместо «2 часа назад» Это уже изменение логики шаблонов. Но зачем? «2 часа назад» — это душевнее.

Бонус-совет: если вы только начинаете — не мучайтесь с часовыми поясами на сервере. Оставьте везде UTC и настройте только фронтенд. Пользователи увидят своё время автоматически.


6. Финальный аккорд: запускаем соцсеть мечты

Поздравляю! Теперь вы знаете о часовых поясах в Sngine больше, чем 80% новичков. Ваша соцсеть больше не будет писать «пост из будущего», а друзья не запутаются, когда вы «были в сети».

И помните: своя соцсеть — это круто. Вы сами решаете правила, внешний вид и даже течение времени. А если что-то пошло не так — просто верните UTC и выпейте чай. Время подождёт. 😉


🚀 На посошок: Sngine — отличный старт для вашего проекта. Не бойтесь экспериментировать, читайте документацию и добавляйте фишки, о которых молчат в больших соцсетях. Например, возможность ставить «лайк» вчерашним постам. Хотя нет, это уже машина времени.

Удачи, повелитель времени и властелин своей вселенной!

Закрыт