2011-08-17 6 views
12

estoy usando líquido con Jekyll para publicar las fechas en la página web de mi banda (http://longislandsound.com.au)fechas en líquido

Lo que quiero es ocultar automáticamente las fechas de edad, por lo que yo no' Tengo que entrar y borrarlos de nuevo. Creo que la mejor manera de hacerlo sería comparar la fecha de publicación con la fecha actual y solo mostrar la publicación si la fecha es futura, pero no puedo encontrar la manera de hacerlo.

Aquí está el código actual:

<ul id="dates"> 
{% for post in site.posts reversed %} 
<a href="{{post.link}}"> 
<li> 
    <div class="date"> 
     <span class="day">{{post.date | date: "%d"}}</span><br /> 
     <span class="month">{{post.date | date: "%b"}}</span> 
     <span class="week">{{post.date | date: "%a"}}</span> 
    </div> 
    <div class="details"> 
     <span class="venue">{{post.venue}}</span><br /> 
     <span class="town">{{post.town}}</span> 
    </div> 
</li> 
</a> 
{% endfor %} 
</ul> 

He intentado algunas sentencias if, pero no puedo encontrar la manera de comparar la fecha a la fecha actual.

¿Alguien puede ayudar?

Respuesta

25

Basado en date-math-manipulation-in-liquid-template-filter y get-todays-date-in-jekyll-with-liquid-markup, usted debería ser capaz de utilizar una combinación de {{'now'}} o {{site.time}} y difíciles de encontrar filtro UNIX fecha de marca de tiempo | date: '%s'

{% capture nowunix %}{{'now' | date: '%s'}}{% endcapture %} 
{% capture posttime %}{{post.date | date: '%s'}}{% endcapture %} 
{% if posttime < nowunix %} 
...show posts... 

Capturado números pueden actuar como cadenas, no números, y puede ser de tipo fundido de nuevo a números usando este truco:

{% assign nowunix = nowunix | plus: 0 %} 
+0

¿Hay alguna manera de filtrar publicaciones para incluir solo eventos futuros fuera de un bucle? Las pruebas de imagen 'ahora' contra' event.date' se volverían costosas a medida que crezca la cantidad de eventos. Mencionan el uso de 'with_scope' [aquí] (https://groups.google.com/forum/#!topic/locomotivecms/4-3gZbv03V0), pero Jekyll no lo reconoce como una etiqueta. – Roy

+0

¡Esto fue increíblemente útil, gracias! – aaandre

2

Aunque este código funciona:

{% capture nowunix %}{{'now' | date: '%s'}}{% endcapture %} 
{% capture posttime %}{{post.date | date: '%s'}}{% endcapture %} 
{% if posttime < nowunix %} ...show posts... 

Solo se ejecuta durante la compilación. Si desea que su sitio web se actualice de verdad automáticamente, debe dejar que javascript lo oculte.

de inicio con este líquido:

{% for item in site.events %} 
    <div future-date="{{ item.date | date: '%Y%m%d' }}">...</div> 
{% endfor %} 

y añadir a javascript:

function getCompareDate() { 
    var d = new Date(), 
     month = '' + (d.getMonth() + 1), 
     day = '' + d.getDate(), 
     year = d.getFullYear(); 
    if (month.length < 2) month = '0' + month; 
    if (day.length < 2) day = '0' + day; 
    return [year, month, day].join(''); 
} 

$('[future-date]').each(function() { 
    if($(this).attr('future-date') < getCompareDate()) $(this).hide(); 
}); 

Se encontró que la solución a este problema: http://jekyllcodex.org/without-plugin/future-dates/


ACTUALIZACIÓN (02/19/2018):
CloudCannon ahora tiene versiones programadas en las que simplemente puede especificar que cree su proyecto una vez al día. Si usa CloudCannon, recomiendo la respuesta del usuario [here].

+1

No jquery por favor. –

+0

Reescribir esto para no jQuery es súper simple. – JoostS

+1

No estoy planeando aprender una tecnología obsoleta de 10 años, y tampoco estoy planeando hacer conjeturas. En su forma actual, esta respuesta es inútil para mí, pero si la reescribes sin usar jQuery, eliminaré mi voto negativo. –