Como funciona a formatação de datas do Jekyll?

92

Estou usando o Jekyll para gerar um site simples.

Quero que o campo de data seja exibido no formato 12 September 2011.

Eu descobri, através de algumas pesquisas criativas no Google, um pouco de manipulação do formato de data, mas nada que pareça me indicar o nome do mês. O que eu tenho é o {{ page.date| date: "%m-%d-%Y" }}que me dá saída como 09-12-2011, mas não é bem o que estou procurando.

Existe alguma maneira de obter o nome do mês em Jekyll?

Ou, exceto, há alguma documentação para o atributo de data?

Michael
fonte
Filtros interessantes são date_to_stringe date_to_xmlschema(consulte jekyllrb.com/docs/templates )
Martin Thoma
O documento de formatação de data jekyll / liquid mais completo que consegui encontrar: alanwsmith.com/jekyll-liquid-date-formatting-examples
joce

Respostas:

161

Solução

Este filtro de saída:

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

produz datas formatadas como:

9 September 2013

Certifique-se de não perder o sinal de menos ( -) antes de %-dpara o dia. Sem ele, os números abaixo de dez teriam zeros à esquerda (por exemplo 09 September 2013).

Detalhes sobre os tokens de formatação de data individuais podem ser encontrados na página de documentação Liquid "Tags e filtros de saída" .

Mais informações

Eu reuni um grande conjunto de exemplos de formatação de data Jekyll . Ele fornece exemplos para vários formatos e deve fornecer detalhes suficientes para formatar da maneira que você desejar. Alguns exemplos incluem:

  • 23/09/2013
  • 23 de setembro de 2013
  • 23 de setembro de 2013
  • 4 de julho de 2013 (ou seja, alterando os nomes para outros idiomas como "Juli" em vez de "julho").

Aproveitar!

Alan W. Smith
fonte
É possível formatar no formato NNXX, ou seja, 1º 2º 3º etc?
Ian
@Ian - Não vejo uma maneira de fazer o "primeiro", "segundo", etc ... fora dos formatadores de data líquidos. Pode ser possível com alguma lógica extra acrescentada. Poste outra pergunta para isso especificamente e veja se alguém sabe como.
Alan W. Smith
@Ian - Eu postei outra resposta aqui que aborda a 1ª, 2ª, 3ª questões. Também estou atualizando minha resposta para apontar para um conjunto de referência de snippets de formatação de data.
Alan W. Smith,
Não use plus: '0'. Use: {{ page.date | date: "%-m-%d-%Y" }}. Observe o hífen entre %e m: %-m.
Nowaker
1
@DamianNowak - Obrigado pelo ponteiro para usar %-m. É muito mais limpo. Eu atualizei a resposta para refletir isso e atualizarei minha postagem de referência assim que puder.
Alan W. Smith
14

Jekyll adiciona extensões de filtro ao líquido. Veja aqui . Você pode exibir o formato de data desejado simplesmente executando o date_to_long_stringfiltro.

Do link:


Data para Long String

Formate uma data em formato longo, por exemplo, “27 de janeiro de 2011”.

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

Mike Vormwald
fonte
4

Jekyll 3.8 suporta datas ordinais fora da caixa. Para imprimir o mês, use um destes.

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

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

{{ page.date | date_to_long_string: "ordinal" }}irá produzir 24th April 2018.

{{ page.date | date_to_string: "ordinal" }}irá produzir 24th Apr 2018.

Colin
fonte
3

Tente '% B' que significa "O nome completo do mês (` `Janeiro '')"

procure na documentação por strftime, a função que normalmente é usada para converter uma data em string.

theomega
fonte
2

Caso você queira uma solução personalizada, você pode escrever um plugin Jekyll para formatar uma data como você deseja, como este (este exemplo é para datas italianas):

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)

Basta salvar em um arquivo semelhante _plugins/italian_dates.rbe usá-lo conforme necessário nos modelos:

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

Use {{ page.date| date: "%d %B %Y" }}para datas como 12 de setembro de 2011 , consulte o guia de formatação rápido e agradável em Jekyll Date Formatting

SACn
fonte