Разница в датах документа опубликовано и снято
Подскажите пожалуйста, как можно вывести разницу во времени публикации и снято с публикации документа.
Например, должно выводится так:
Например, должно выводится так:
до отмены публикации документа осталось 8 дней 23ч 30 мин 20 сек
Комментарии: 15
Все просто, можно, например, использовать такой сниппет.
Выдаст разницу между текущем временем и временем окончания публикации.
Выдаст разницу между текущем временем и временем окончания публикации.
/* Сниппет untilEndPublish */
$until_end_publish = $modx->resource->unpub_date - time();
return date('d дней, H часов, m минут, s секунд ',$until_end_publish);
Вызов на странице с ресурсом: [[!untilEndPublish]].
… и каждую секунду обновлять страницу. :)
Сергей, если вы подругому не умеете, можете обновлять :) А я бы дописал к этому еще обратный отсчет на js)
Ну попробуйте дописать js к вашему сниппету, а я посмотрю и поучусь.
Я напишу js скрипт и поделюсь)
Спасибо большое за подсказку. Я не знал как получить дату в нужном формате, почему то с глупости пытался сделать по другому.
Всегда, пожалуйста!)
Перед тем как задать вопрос я бы начал с Яндекса — javascript таймера обратного отсчета.
А что толку от таймера, если человеку надо сначала время получить? По той ссылке, что вы кинули на яндекс, это не очень понятно.
А по вашему сниппету все супер мега понятно. Мда.
П.С. Сразу видно — школа Николая.
П.С. Сразу видно — школа Николая.
Мой сниппет отдает время до окончания публикации, об этом и был вопрос. Про таймеры в вопросе не было ни слова.
Точно.
П.С. Анекдот вспомнился:
— Товарищ прапорщик, разрешите спросить, под каким углом надо выстрелить из пушки, чтобы снаряд улетел максимально далеко?
— Спрашивайте.
))
П.С. Анекдот вспомнился:
— Товарищ прапорщик, разрешите спросить, под каким углом надо выстрелить из пушки, чтобы снаряд улетел максимально далеко?
— Спрашивайте.
))
Сергей, напишите ваше решение, если вы такой всезнающий. Мое тут есть, вашего нету. Человеку надо получить ответ на вопрос, а не смотреть наши дебаты.
Если кому то будет интересно, то я сделал так:
<?php
/* Сниппет untilEndPublish */
if (isset($pageId)){
$res = $modx->getObject('modResource',$pageId);
$until_end_publish = $res->unpub_date;
$until_end_publish -= time();
}
else{$until_end_publish = $modx->resource->unpub_date - time();}
if ($until_end_publish < 0){
return "Время вышло";
}
if($until_end_publish < 3600){
return date('i минут, s секунд ',$until_end_publish);
}
if ($until_end_publish < 86400){
return date('G часов, i минут, s секунд ',$until_end_publish);
}
if ($until_end_publish > 86400){
return date('d дней, G часов, i минут, s секунд ',$until_end_publish);
}
И вызов:[[!untilEndPublish? &pageId=`[[*id]]`]]
А если нужно живой счетчик то так:
<?php
/* Сниппет untilEndPublish */
if (isset($pageId)){
$res = $modx->getObject('modResource',$pageId);
$until_end_publish = $res->unpub_date;
$until_end_publish -= time();
}
else{$until_end_publish = $modx->resource->unpub_date - time();}
return $until_end_publish;
И JS на фронте:<div id="company-timer-[[*id]]" class="c2">[[!untilEndPublish? &kuponId=`[[*id]]`]]</div>
<script type="text/javascript">new CreateTimer("company-timer-[[*id]]", [[!untilEndPublish? &kuponId=`[[*id]]`]]);</script>
var Timer;
var TotalSeconds;
function CreateTimer(TimerID, Time) {
var oop = this;
this.Timer = document.getElementById(TimerID);
this.TotalSeconds = Time;
this.update();
oop.to = setTimeout(function() {
oop.tick();
}, 1000);
}
CreateTimer.prototype = {
tick: function() {
var oop = this;
if (this.TotalSeconds <= 0) {
return;
}
this.TotalSeconds -= 1;
this.update()
oop.to = setTimeout(function() {
oop.tick();
}, 1000);
},
update: function() {
var Seconds = this.TotalSeconds,
Days = Math.floor(Seconds / 86400);
Seconds -= Days * 86400;
var Hours = Math.floor(Seconds / 3600);
Seconds -= Hours * (3600);
var Minutes = Math.floor(Seconds / 60);
Seconds -= Minutes * (60);
var DD = ' дней ';
if (Days < 5) DD = ' дня ';
if (Days < 2) DD = ' день ';
var TimeStr = ((Days > 0) ? Days + DD : "") + LeadingZero(Hours) + ":" + LeadingZero(Minutes) + ":" + LeadingZero(Seconds)
this.Timer.innerHTML = TimeStr;
}
}
function LeadingZero(Time) {
return (Time < 10) ? "0" + Time : +Time;
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.