Jak działa formatowanie daty Jekyll?


93

Używam Jekyll do generowania prostej witryny.

Chcę, aby pole daty było wyświetlane w formacie 12 September 2011.

Znalazłem, poprzez kreatywne wyszukiwanie w Google, trochę manipulacji formatem daty, ale nic, co wydaje mi się, że nie podało mi nazwy miesiąca. Mam to {{ page.date| date: "%m-%d-%Y" }}, co daje mi wyniki 09-12-2011, ale nie jest to, czego szukam.

Czy jest jakiś sposób, aby miesiąc był nazwą w Jekyll?

Lub, z wyjątkiem tego, czy istnieje dokumentacja dotycząca atrybutu daty?


Ciekawe filtry to date_to_stringi date_to_xmlschema(patrz jekyllrb.com/docs/templates )
Martin Thoma

Najbardziej kompletny dokument formatowania daty jekyll / liquid, jaki udało mi się znaleźć: alanwsmith.com/jekyll-liquid-date-formatting-examples
joce

Odpowiedzi:


163

Rozwiązanie

Ten filtr wyjściowy:

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

tworzy daty w formacie:

9 September 2013

Pamiętaj, aby nie przegapić znaku minus ( -) przed %-ddniem. Bez tego liczby poniżej dziesięciu miałyby zera wiodące (np 09 September 2013.).

Szczegóły na temat poszczególnych tokenów formatujących datę można znaleźć na stronie dokumentacji Liquid „Tagi wyjściowe i filtry” .

Więcej informacji

Złożyłem duży zestaw przykładów formatowania daty Jekyll . Zawiera przykłady dla kilku formatów i powinien zawierać wystarczająco dużo szczegółów, aby formatować w dowolny sposób. Oto kilka przykładów:

  • 2013-09-23
  • 23 września 2013
  • 23 września 2013
  • 4 lipca 2013 r. (Tj. Zmiana nazw na inne języki, np. „Juli” zamiast „lipiec”).

Cieszyć się!


Czy można go sformatować w formacie NNXX, tj. 1. 2. 3. itd.?
Ian

@Ian - nie widzę sposobu na zrobienie „pierwszego”, „drugiego” itp. Poza formatowaniem daty w płynie. Może to być możliwe po dodaniu dodatkowej logiki. Opublikuj kolejne pytanie dotyczące tego konkretnie i zobacz, czy ktoś wie jak.
Alan W. Smith,

@Ian - zamieściłem tutaj inną odpowiedź, która dotyczy pierwszego, drugiego, trzeciego pytania. Aktualizuję również moją odpowiedź, aby wskazywała na zestaw referencyjny fragmentów formatowania daty.
Alan W. Smith,

Nie używaj plus: '0'. Zastosowanie: {{ page.date | date: "%-m-%d-%Y" }}. Zauważ, że łącznik pomiędzy %lim: %-m.
Nowaker

1
@DamianNowak - Dzięki za użycie wskaźnika %-m. Jest dużo czystszy. Zaktualizowałem odpowiedź, aby to odzwierciedlić i zaktualizuję mój wpis referencyjny tak szybko, jak to możliwe.
Alan W. Smith

14

Jekyll dodaje rozszerzenia filtrów do cieczy. Zobacz tutaj . Możesz wyświetlić żądany format daty, po prostu uruchamiając date_to_long_stringfiltr.

Z linku:


Data na długi ciąg

Sformatuj datę w długim formacie, np. „27 stycznia 2011”.

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


4

Jekyll 3.8 obsługuje daty porządkowe po wyjęciu z pudełka. Aby wyświetlić miesiąc, użyj jednego z nich.

{{ page.date | date_to_long_string: "ordinal", "US" }}wyjdzie April 24th, 2018.

{{ page.date | date_to_string: "ordinal", "US" }}wyjdzie Apr 24th, 2018.

{{ page.date | date_to_long_string: "ordinal" }}wyjdzie 24th April 2018.

{{ page.date | date_to_string: "ordinal" }}wyjdzie 24th Apr 2018.


3

Spróbuj „% B”, co oznacza „Pełna nazwa miesiąca („ styczeń ”)”

przeszukaj dokumentację pod kątem strftime, funkcji, która jest zwykle używana do konwersji daty na łańcuch.


2

Na wypadek, gdybyś chciał mieć niestandardowe rozwiązanie, możesz napisać wtyczkę Jekyll, aby sformatować datę, jak chcesz, na przykład (ten przykład dotyczy włoskich dat):

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)

Po prostu zapisz to w pliku takim jak _plugins/italian_dates.rbi używaj go tak, jak potrzebujesz w szablonach:

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.