Как работает форматирование даты Jekyll?


93

Я использую Jekyll для создания простого сайта.

Я хочу, чтобы поле даты отображалось в формате 12 September 2011.

Путем творческого поиска в Google я обнаружил небольшие манипуляции с форматом даты, но ничего, что могло бы дать мне название месяца. То, что у меня есть {{ page.date| date: "%m-%d-%Y" }}, дает мне вывод 09-12-2011, но это не совсем то, что я ищу.

Есть ли способ получить месяц как имя в Джекилле?

Или, кроме этого, есть ли документация для атрибута даты?


Интересные фильтры date_to_stringи date_to_xmlschema(см. Jekyllrb.com/docs/templates )
Мартин Тома

Самый полный документ форматирования даты jekyll / liquid date, который я смог найти: alanwsmith.com/jekyll-liquid-date-formatting-examples
joce

Ответы:


163

Решение

Этот выходной фильтр:

{{ page.date | date: "%-d %B %Y" }}

производит даты в формате:

9 September 2013

Не пропустите минус ( -) перед %-dднем. Без него числа меньше десяти имели бы ведущие нули (например 09 September 2013).

Подробную информацию об отдельных токенах форматирования даты можно найти на странице документации Liquid «Теги и фильтры вывода» .

Больше информации

Я собрал большой набор примеров форматирования даты в Jekyll . Он предоставляет примеры для нескольких форматов и должен содержать достаточно деталей для любого желаемого форматирования. Вот некоторые примеры:

  • 2013-09-23
  • 23 сентября 2013 г.
  • 23 сентября 2013 г.
  • 4 июля 2013 г. (т.е. изменение названий на другие языки, например «Juli» вместо «July»).

Наслаждайтесь!


Можно ли его отформатировать в формате NNXX, т.е. 1-й, 2-й, 3-й и т.д.?
Ян

@Ian - Я не вижу способа сделать «1-й», «2-й» и т. Д. С помощью форматеров даты Liquid. Это может быть возможно с добавлением некоторой дополнительной логики. Задайте другой вопрос специально для этого и посмотрите, знает ли кто-нибудь, как это сделать.
Алан В. Смит

@Ian - я опубликовал здесь еще один ответ, который касается 1, 2, 3 вопроса. Я также обновляю свой ответ, чтобы указать на справочный набор фрагментов форматирования даты.
Алан В. Смит,

Не используйте plus: '0'. Использование: {{ page.date | date: "%-m-%d-%Y" }}. Обратите внимание , что дефис между %и м: %-m.
Nowaker

1
@DamianNowak - Спасибо за указатель %-m. Это намного чище. Я обновил ответ, чтобы отразить это, и обновлю свой справочный пост, как только смогу.
Алан В. Смит

14

Джекилл добавляет к жидкости расширения фильтра. Смотрите здесь . Вы можете отобразить желаемый формат даты, просто запустив date_to_long_stringфильтр.

По ссылке:


Дата в длинную строку

Отформатируйте дату в длинном формате, например «27 января 2011 года».

{{ site.time | date_to_long_string }} => 17 November 2008


4

Jekyll 3.8 "из коробки" поддерживает порядковые даты. Для вывода месяца используйте один из них.

{{ page.date | date_to_long_string: "ordinal", "US" }}выведет April 24th, 2018.

{{ page.date | date_to_string: "ordinal", "US" }}выведет Apr 24th, 2018.

{{ page.date | date_to_long_string: "ordinal" }}выведет 24th April 2018.

{{ page.date | date_to_string: "ordinal" }}выведет 24th Apr 2018.


3

Попробуйте "% B", что означает "Полное название месяца (" Январь ")"

найдите в документации функцию strftime, которая обычно используется для преобразования даты в строку.


2

На всякий случай, если вам нужно индивидуальное решение, вы можете написать плагин Jekyll для форматирования даты, как вы хотите, например (этот пример для итальянских дат):

module Jekyll
    module ItalianDates
        MONTHS = {"01" => "gennaio", "02" => "febbraio", "03" => "marzo",
                "04" => "aprile", "05" => "maggio", "06" => "giugno",
                "07" => "luglio", "08" => "agosto", "09" => "settembre",
                "10" => "ottobre", "11" => "novembre", "12" => "dicembre"}

        # http://man7.org/linux/man-pages/man3/strftime.3.html
        def italianDate(date)
            day = time(date).strftime("%e") # leading zero is replaced by a space
            month = time(date).strftime("%m")
            year = time(date).strftime("%Y")
            day+' '+MONTHS[month]+' '+year
        end

        def html5date(date)
            day = time(date).strftime("%d")
            month = time(date).strftime("%m")
            year = time(date).strftime("%Y")
            year+'-'+month+'-'+day
        end
    end
end

Liquid::Template.register_filter(Jekyll::ItalianDates)

Просто сохраните это в файл, например, _plugins/italian_dates.rbи используйте его по мере необходимости в шаблонах:

<time datetime="{{page.date | html5date}}">{{page.date | italianDate}}</time>

2

Используйте {{ page.date| date: "%d %B %Y" }}для дат, например, 12 сентября 2011 г. , см. Красивое и быстрое руководство по форматированию в Jekyll Date Formatting.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.