2017-10-16 3 views
1

In meiner Jekyll-Website habe ich eine Sammlung talks, die eine Eigenschaft in der Front-Angelegenheit startDate hat. Ich habe startDate in der eigentlichen Titelei zu %Y-%m-%d formatiert, so dass meine Titelei wie folgt aussieht:Wie vergleiche ich das Datum in der Front-Sache mit der Website.date

--- 
startDate: 2017-10-29 
--- 

Ich mag würde einen Abschnitt Die nächsten Gespräche genannt zeigen, ob es irgendwelche startDate s sind, die nach sind site.time. Bisher habe ich dies:

{% assign currentDate = site.time | date: "%Y-%m-%d" %} 

In einer for Schleife, kann ich drucken talk.startDate und currentDate und zeigen die Werte für jeden, und sie sind in der gleichen Format. Aber was ich nicht tun kann, ist sie zu vergleichen. Ich möchte wirklich, dies zu tun:

{% assign upcoming = site.talks | where_exp: "startDate", "startDate > currentDate" %}` 

{% if upcoming.size > 0 %} 
    <h1>Upcoming talks</h1> 
    ... 
{% endif %} 

Aber wenn ich size für beide upcoming bekommen und past (die die gleiche wie upcoming ist aber, wo startDate < currentDate), sie beide zu bewerten auf 0. Dies sagt mir, die Daten aren Vergleiche tatsächlich nicht in meinem Filter.

Kann mir jemand helfen, das herauszufinden?

Antwort

1

Bitte lesen Sie diesen Beitrag: In Jekyll, how to show "posts from last week". Sie versuchen das Gleiche zu tun (nur in der Vergangenheit und nicht in der Zukunft). Beachte, dass Jekyll täglich etwas bauen muss, was du versuchst zu tun. Das ist kein sehr realistisches Szenario. A javascript solution würde besser funktionieren.

Die Javascript-Lösung erfordert, dass Sie ein benutzerdefiniertes Attribut auf Ihre Liste hinzuzufügen, wie folgt aus:

{% for talk in upcoming %} 
    <li date="{{ talk.startDate }}">{{ talk.title }}</li> 
{% endfor %} 

Verwenden Sie dann jQuery (oder Vanille-js) Alte Beiträge zu verstecken:

// loop through all list items with a date 
$('li[date]').each(function(){ 
    // create a postDate in a date object 
    var startDate = new Date($(this).attr('date')); 
    // compare dates and hide old posts 
    if(startDate<Date.now()) $(this).hide(); 
}); 
+0

Ich kann die Website täglich mit einem Cron-Job erstellen, also werde ich ähnlich wie beim ersten Vorschlag verwenden. Vielen Dank. – i7nvd

+0

@ i7nvd Nur aus Neugier: Wie läuft/konfigurieren Sie Ihren Cron? – JoostS

0

Die Unausgesprochene Frage ist: Wie man Date in Jekyll oder Flüssigkeit vergleicht?

Dies war die einfachste Lösung, die ich tun konnte:

{%- assign buildTimeInSecondsInEpoch = site.time | date: "%s" | plus: 0 -%} 

Dies schafft einen Integer-Variable, die vergleicht gegen sein kann. Zum Beispiel:

{%- assign pagesForPublishing = "" | split: "" -%} 
{%- for ape in site.pages -%} 
    {%- assign pageDateInSecondsInEpoch = ape.date | date:"%s" | plus: 0 -%} 
    {%- if pageDateInSecondsInEpoch < buildTimeInSecondsInEpoch -%} 
     {%- assign pagesForPublishing = pagesForPublishing | push: ape -%} 
    {%- endif -%} 
{%- endfor -%} 

Auch Jekyll wird keine Beiträge mit einem Datum in der Zukunft verarbeitet, kommt die --future Option verwenden zu lassen (auf Build oder dienen).

Seitendateien werden unabhängig vom Datum von jekyll verarbeitet.

Verwandte Themen