From b73e197ccb77557c7d5824faf83ddc97de70cb65 Mon Sep 17 00:00:00 2001 From: Daniel Rudolf Date: Fri, 28 Jul 2017 12:16:26 +0200 Subject: [PATCH] Refactor YAML frontmatter date parsing You can now explicitly specify both the `date_formatted` and `time` meta values to overwrite Pico's page date handling. Specifying `time` doesn't make much sense in general, however, specifying `date_formatted` allows you to use `{{ meta.date_formatted }}` on all systems, even those where `strftime()` doesn't work as wished --- lib/Pico.php | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/Pico.php b/lib/Pico.php index b1e71eb..327f7ac 100644 --- a/lib/Pico.php +++ b/lib/Pico.php @@ -1229,21 +1229,28 @@ class Pico } } - if (!empty($meta['date'])) { + if (!empty($meta['date']) || !empty($meta['time'])) { // workaround for issue #336 // Symfony YAML interprets ISO-8601 datetime strings and returns timestamps instead of the string // this behavior conforms to the YAML standard, i.e. this is no bug of Symfony YAML if (is_int($meta['date'])) { $meta['time'] = $meta['date']; + $meta['date'] = ''; + } + if (empty($meta['time'])) { + $meta['time'] = strtotime($meta['date']) ?: ''; + } elseif (empty($meta['date'])) { $rawDateFormat = (date('H:i:s', $meta['time']) === '00:00:00') ? 'Y-m-d' : 'Y-m-d H:i:s'; $meta['date'] = date($rawDateFormat, $meta['time']); - } else { - $meta['time'] = strtotime($meta['date']); } - $meta['date_formatted'] = utf8_encode(strftime($this->getConfig('date_format'), $meta['time'])); } else { - $meta['date'] = $meta['time'] = $meta['date_formatted'] = ''; + $meta['date'] = $meta['time'] = ''; + } + + if (empty($meta['date_formatted'])) { + $dateFormat = $this->getConfig('date_format'); + $meta['date_formatted'] = $meta['time'] ? utf8_encode(strftime($dateFormat, $meta['time'])) : ''; } } else { // guarantee array key existance