Разница в датах документа опубликовано и снято

Подскажите пожалуйста, как можно вывести разницу во времени публикации и снято с публикации документа.
Например, должно выводится так:
до отмены публикации документа осталось 8 дней 23ч 30 мин 20 сек
Eugene Generalov
09 декабря 2015, 10:05
modx.pro
2
2 313
+2

Комментарии: 15

Лев Вербицкий
09 декабря 2015, 13:33
+1
Все просто, можно, например, использовать такой сниппет.
Выдаст разницу между текущем временем и временем окончания публикации.
/* Сниппет untilEndPublish */
$until_end_publish = $modx->resource->unpub_date - time();
return date('d дней, H часов, m минут, s секунд ',$until_end_publish);
Вызов на странице с ресурсом: [[!untilEndPublish]].
    Сергей Шлоков
    09 декабря 2015, 13:34
    +1
    … и каждую секунду обновлять страницу. :)
      Лев Вербицкий
      09 декабря 2015, 13:36
      0
      Сергей, если вы подругому не умеете, можете обновлять :) А я бы дописал к этому еще обратный отсчет на js)
        Сергей Шлоков
        09 декабря 2015, 13:40
        +1
        Ну попробуйте дописать js к вашему сниппету, а я посмотрю и поучусь.
          Eugene Generalov
          09 декабря 2015, 15:24
          0
          Я напишу js скрипт и поделюсь)
      Eugene Generalov
      09 декабря 2015, 15:23
      +2
      Спасибо большое за подсказку. Я не знал как получить дату в нужном формате, почему то с глупости пытался сделать по другому.
    Сергей Шлоков
    09 декабря 2015, 13:35
    +1
    Перед тем как задать вопрос я бы начал с Яндекса — javascript таймера обратного отсчета.
      Лев Вербицкий
      09 декабря 2015, 13:37
      0
      А что толку от таймера, если человеку надо сначала время получить? По той ссылке, что вы кинули на яндекс, это не очень понятно.
        Сергей Шлоков
        09 декабря 2015, 13:41
        0
        А по вашему сниппету все супер мега понятно. Мда.
        П.С. Сразу видно — школа Николая.
          Лев Вербицкий
          09 декабря 2015, 13:42
          +1
          Мой сниппет отдает время до окончания публикации, об этом и был вопрос. Про таймеры в вопросе не было ни слова.
            Сергей Шлоков
            09 декабря 2015, 13:46
            +1
            Точно.
            П.С. Анекдот вспомнился:
            — Товарищ прапорщик, разрешите спросить, под каким углом надо выстрелить из пушки, чтобы снаряд улетел максимально далеко?
            — Спрашивайте.
            ))
              Лев Вербицкий
              09 декабря 2015, 13:48
              +3
              Сергей, напишите ваше решение, если вы такой всезнающий. Мое тут есть, вашего нету. Человеку надо получить ответ на вопрос, а не смотреть наши дебаты.
      Eugene Generalov
      25 декабря 2015, 12:50
      1
      0
      Если кому то будет интересно, то я сделал так:
      <?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]]`]]
        Eugene Generalov
        25 декабря 2015, 12:58
        0
        А если нужно живой счетчик то так:
        <?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;
        }
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          15