Isolution666
@Isolution666
Full-Stack Developer

Динамическая смена даты и времени с момента публикации на Yii2, как это сделать?

Здравствуйте.
--
35145c296d3e40c5b1e36f2957afb94a.png
Предыстория: Заметил, как в социальной сети "в контакте", происходит обновление даты и времени с момента публикации поста. Грубо говоря, листаешь ты себе ленту, страница не перезагружается, комменты пишешь, лайки ставишь, и видишь, что у каждого блока по отдельности меняется надпись:

"опубликовано только что"
"опубликовано пять минут назад"
"опубликовано вчера в 13:16"


Уж не судите строго, решил попробовать провернуть это сам, без помощи и подсказки, написал на php функцию, которая выводит то или иное сообщение, обернул страницу в Pjax, и поставил javascript функцию которая обновляла страницу, таким образом в каждом блоке динамично менялись надписи. И вроде всё здорово, НО - веселье началось когда скрипт не справлялся с отображением плитки с картинками, и всё съезжало, позже я понял, что и "лайки" и "комментарии" будет ставить невозможно!!!
Моя идея реализовать подобную идею превратилась в кошмар)))
Но я не отчаялся, и понял, что от php и Pjax нужно отказаться, и написать функцию на javascript которая по id блока, будет выводить состояние срока публикации. Так же пришло осознание, что условия смены unix даты должно опираться на функцию подсчёта времени от даты публикации.

Подобное я делал на php чтобы подсчитать дни между двумя датами, нет ни капли сомнения, что такое решение есть и на javascript, почему я решил обратится к нему? Потому что нагрузка на сервер будет меньше, учитывая, что на одной странице может оказаться более 100 записей, и каждая будет обновлять текущий срок с момента публикации. Страшно представить, какая будет нагрузка на сервер, учитывая динамику просмотра, редактирования, комментирования, обновления даты, "лайки", но всё же интересно, смогу ли я осилить такой функционал.
=======================================
Вопрос:
Есть пример динамической даты где показано, как реализовать обновление с сегодняшней датой. Я же буду пытаться обновлять срок давности даты, беря её из базы данных в unix формате. Как извлечь дату, подсчитать количество времени (разницу), вывести контент - я знаю.

Но как это реализовать для каждого блока отдельно?
  • Вопрос задан
  • 558 просмотров
Решения вопроса 1
planc
@planc
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
qonand
@qonand
Software Engineer
Блоков на странице может быть хоть 1000 но пользователь всегда видит только определенное количество из них. Поэтому по хорошему Вам нужно обновлять срок давности не для всех блоков выведенных на станице, а только для тех которые у пользователя на виду. Соответственно Вам нужно:
1. Определять (например при скроле страницы) какие блоки видны в текущий момент пользователю
2. Определять массив селекторов для каждого из блока
3. В цикле проходиться по этому массиву и для каждого из блока пересчитывать дату
Ответ написан
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
А при чем тут yii? Это вопрос к js. Все что происходит в браузере - это js. Yii хранит и достает из базы данные о времени и не меняет их. Меняет их js, по таймеру или скролу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы