Так получилось, что на новом сайте (взял VPS в США) приходится вручную в базе данных восстанавливать время публикации старых комментариев. Выставляю правильный timestamp, а на сайте дата отличается на 2 дня и даже минуты не соответствуют таймстампу.
Сервер настроен на Europe/Moscow. Drupal тоже настроен на Москву.
При этом, если через сайт постить сообщения, то все корректно получается.
Подскажите, пожалуйста, где мой косяк, как пофиксить?
Комментарии
Почему вы так уверены, что выставляете правильный таймштамп?
Я было хотел посоветовать проверить PHP date.timezone (в php.ini), но поскольку вы сообщаете, что при размещении комментария через форму всё ОК, то причина не в этом.
Остаётся сомнение в "правильных" таймштампах. Как вы их генерируете/получаете?
https://www.epochconverter.com/
28.09.2024 - 1736307164 - на сайте отображается как 01.10.2024
А этот штамп - 1727969955 - вообще как 08.10.2024 отображается на сайте, хотя это 03.10.2024
Вы что-то частично наконвертили не то. Проверил через свой конвертер дат (сделал когда-то на локалке).
1736307164 - это вообще сегодняшний день. А именно 08.01.2025 - 06:32:44
1727969955 у меня конвертируется как 03.10.2024 - 18:39:15. Т.е. здесь всё верно.
Думаю, стоит проверить:
1. ситуацию с кешем.
2. как именно в шаблонах вывода комментария (Twig) обрабатывается дата коммента.
php.ini
[Date]
; Defines the default timezone used by the date functions
; https://php.net/date.timezone
date.timezone = "Europe/Moscow"
1727549595 - 28-09-2024
но отображается как 01.10.2024
Кэш активно и много раз очищал как в самом Drupal так и на компьютере, на планшете.
{{ created | date ('d.m.Y H:i') }}
Часы:минуты у всех комментов одинаковые получаются. Соответствуют времени на моем компьютере или планшете.
1. У меня есть мысль, что в таблице сущности комментария (comment_field_data) помимо правки поля created всё же нужно такое же значение (или не менее) ставить и для поля changed. Иначе тут возможны коллизии. Эти два поля обычно стандартные для всех типов сущностей и присутствуют в BaseFieldDefinition во всех случаях.
2. Вторая мысль: в таблице comment_entity_statistics есть ещё одно поле last_comment_timestamp, в которое пишется таймштамп последнего комментария для конкретной ноды. В зависимости от представления, может выводиться и это значение (например, в тизерах/анонсах нод). Стало быть, это значение также должно быть идентичным вашему исправленному таймштампу.
Я всегда оба поля заполняю одинаковой датой:
В coment_entity_statistics у меня всего одна строка:
Нода тоже всего одна на сайте? В любом случае вопрос скорее праздный, поскольку криминала я на ваших скриншотах не увидел.
Есть ещё смутная мысль, что тут присутствует какая-то чехарда с ревизиями материалов. Поле комментария в теории сохраняется в ревизиях ноды также, как и любое другое поле. Вот только хранит ли ревизия поля коммента его даты - тут не могу сказать навскидку.
Думаю, тут уместнее менять подход к обновлению комментариев. Обновлять не вручную через прямую правку значений в рядах БД, а через друпаловскую API-механику сохранения/обновления сущности комментария. То есть, возможно, написать какой-то батч или просто кастомную форму правки коммента с полями
"created"
и"changed"
, и сохраняться, используяComment::save()
.