Добавьте один день к «дате окончания события» с помощью JavaScript (WordPress, Timber / Twig) - PullRequest
0 голосов
/ 11 марта 2020

Мне нужно добавить один день к 'end_date', который установлен в самой публикации (WordPress)

Вот весь фрагмент кода:

document.addEventListener('DOMContentLoaded', function() {
      var calendarEl = document.getElementById('calendar');

      var calendar = new FullCalendar.Calendar(calendarEl, {
        events: [
        {% for post in events %}
        {
          title  : '{{ post.title }} | {{ post.location }}',
          start  : '{{ post.start_date|date('Y-m-d') }}',
          end    : '{{ post.end_date|date('Y-m-d') }}',
          color  : '{{ post.type }}'
        },
        {% endfor %}
        ],
        plugins: [ 'dayGrid' ]
      });

      calendar.render();
    });

Кто-нибудь знает, как это можно лучше сделать? Предпочтительно в этом фрагменте кода.

Спасибо.

1 Ответ

0 голосов
/ 14 марта 2020

Сначала вы должны преобразовать свое время в объект datetime. Для этого я бы использовал функцию:

функции. php

function convert_date_to_format( $date_string, $format = 'Y-m-d' ) {
    $date = DateTimeImmutable::createFromFormat(
        'Ymd',
        $date_string
    );

    return $date->format( $format );
}

Поскольку вы уже знаете формат даты вашей строки даты (Ymd ), вы можете использовать DateTimeImmutable::createFromFormat().

Объект datetime в PHP имеет метод format() для вывода даты в определенном вами формате.

Здесь вы можете использовать функцию в вашем случае:

{% for post in events %}
    {
      title : '{{ post.title }} | {{ post.location }}',
      start : '{{ fn('convert_date_to_format', post.start_date, 'Y-m-d') }}',
      end   : '{{ fn('convert_date_to_format', post.end_date, 'Y-m-d') }}',
      color : '{{ post.type }}'
    },
{% endfor %}

Теперь, на самом деле, это идеальный вариант использования для расширения вашего поста и перемещения ваших логи c из Twig в PHP. Если у вас есть доступ к определению переменной post, вы можете создать определенный класс c для сообщений о событиях, расширив Timber\Post.

<?php

class EventPost extends Timber\Post {
    /**
     * Converts a date from Ymd format to another format.
     *
     * @param string $date_string The date string in Ymd format.
     * @param string $format      The desired output format.
     *
     * @return string
     */
    protected function convert_date_to_format( $date_string, $format ) {
        $date = DateTimeImmutable::createFromFormat(
            'Ymd',
            $date_string
        );

        return $date->format( $format );
    }

    /**
     * Gets formatted start date.
     *
     * @param string $format Optional. The preferred format. Default `Y-m-d`.
     *
     * @return string
     */
    public function start_date( $format = 'Y-m-d' ) {
        $date = $this->meta( 'start_date' );

        return $this->convert_date_to_format( $date, $format );
    }

    /**
     * Gets formatted end date.
     *
     * @param string $format Optional. The preferred format. Default `Y-m-d`.
     *
     * @return string
     */
    public function end_date( $format = 'Y-m-d' ) {
        $date = $this->meta( 'end_date' );

        return $this->convert_date_to_format( $date, $format );
    }
}

Вы можете подготовить post следующим образом.

$context['post'] = new EventPost();

Ваш шаблон Twig будет выглядеть следующим образом:

{% for post in events %}
    {
      title : '{{ post.title }} | {{ post.location }}',
      start : '{{ post.start_date('Y-m-d') }}',
      end   : '{{ post.end_date('Y-m-d') }}',
      color : '{{ post.type }}'
    },
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...