【发布时间】:2020-04-07 18:02:27
【问题描述】:
当我创建一个帖子时,我必须在前面插入布局、标题、日期等。我关心的是date 前面的内容。在日期字段中手动插入date time 和time offset 非常不方便。
我无法弄清楚如何自动执行此操作。我想让前面的date随着系统时间自动更新。
【问题讨论】:
当我创建一个帖子时,我必须在前面插入布局、标题、日期等。我关心的是date 前面的内容。在日期字段中手动插入date time 和time offset 非常不方便。
我无法弄清楚如何自动执行此操作。我想让前面的date随着系统时间自动更新。
【问题讨论】:
front matter 中的 date 变量是一个可选变量,您可以将其设置为能够覆盖根据 Jekyll 查找的内容(即2019-12-14-post-title.md)。它应该只指最初发布帖子的日期,不是当前系统日期。除了某些极端情况,你真的不应该在前面定义date。
您可以使用Liquid templating 将当前时间发布到页面,方法是将"now" 关键字传递给您的液体模板中的date,如下所示:
This page was last updated at {{ "now" | date: "%Y-%m-%d %H:%M" }}.
获取输出:
This page was last updated at 2019-12-14 17:48.
但是,这种方法对于 Jekyll 的使用有一个很大的缺点,因为它会引用模板中上次生成页面的时间的当前日期,而不是用户访问页面的时间。
访问当前系统时间的最佳方式可能是改用 javascript。根据您对语言的熟悉程度,这相当容易,但基本上您可以创建一个Date 对象,然后输出您要显示的信息。这是我制作的一个快速 sn-p,它显示了几个作用于 Date 对象以输出不同值(例如日期、时间和年份)的方法:
<!DOCTYPE html>
<html>
<body>
<h3>The toDateString() method converts a date to a date string:</h3>
<p id="demo1"></p>
<h3>The toLocaleTimeString() method outputs formatted time:</h3>
<p id="demo2"></p>
<h3>The getFullYear() method outputs the year:</h3>
<p id="demo3"></p>
<script>
// create date object
var d = new Date();
// use toDateString() to output formatted date
document.getElementById("demo1").innerHTML = d.toDateString();
// use toLocaleTimeString() to output formatted time
document.getElementById("demo2").innerHTML = d.toLocaleTimeString();
// use getFullYear() to output year
document.getElementById("demo3").innerHTML = d.getFullYear();
</script>
</body>
</html>
W3schools 对 Date object 以及如何使用 format output 有很好的说明,如果您需要更多示例和使用参考。
如果您需要了解如何在 Jekyll 中使用 Javascript,Jekyll Talk 上有一篇有用的帖子会有所帮助。
【讨论】:
首先,您不必插入“布局、标题、日期等”。您可以为他们使用Front Matter defaults。这仅对布局有意义,因为标题可以或应该是默认值,日期也不是。
必须在您的文件名中设置日期,并且可以在 Front Matter 中覆盖该日期。请注意,这仅适用于内置集合posts。如果您使用自定义集合,则根本不需要日期。
但是,如果您仍然选择使用 posts 并且想要自动添加日期,那么只有一个真正的选择:使用自动输入此输入的 CMS,例如 Forestry.io 或 CloudCannon。
【讨论】: