Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2021-07-27 14:45:05 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2021-07-27 20:02:48 +0300
commitefa5760db5ef39ae084bfccb5b8f756c7b117a2a (patch)
tree7c70d6665f34ca25a443f5a51ce956a3fa729282 /resources
parenta57dda854b5efd3429af5f0b1564fc9d9d5439b9 (diff)
Add timezone support for front matter dates without one
Fixes #8810
Diffstat (limited to 'resources')
-rw-r--r--resources/page/pagemeta/page_frontmatter.go13
-rw-r--r--resources/page/pagemeta/page_frontmatter_test.go3
2 files changed, 9 insertions, 7 deletions
diff --git a/resources/page/pagemeta/page_frontmatter.go b/resources/page/pagemeta/page_frontmatter.go
index 3184b444d..8e03c5f88 100644
--- a/resources/page/pagemeta/page_frontmatter.go
+++ b/resources/page/pagemeta/page_frontmatter.go
@@ -70,6 +70,9 @@ type FrontMatterDescriptor struct {
// This is the Page's Slug etc.
PageURLs *URLPath
+
+ // The Location to use to parse dates without time zone info.
+ Location *time.Location
}
var dateFieldAliases = map[string][]string{
@@ -119,7 +122,7 @@ func (f FrontMatterHandler) IsDateKey(key string) bool {
// A Zero date is a signal that the name can not be parsed.
// This follows the format as outlined in Jekyll, https://jekyllrb.com/docs/posts/:
// "Where YEAR is a four-digit number, MONTH and DAY are both two-digit numbers"
-func dateAndSlugFromBaseFilename(name string) (time.Time, string) {
+func dateAndSlugFromBaseFilename(location *time.Location, name string) (time.Time, string) {
withoutExt, _ := paths.FileAndExt(name)
if len(withoutExt) < 10 {
@@ -127,9 +130,7 @@ func dateAndSlugFromBaseFilename(name string) (time.Time, string) {
return time.Time{}, ""
}
- // Note: Hugo currently have no custom timezone support.
- // We will have to revisit this when that is in place.
- d, err := time.Parse("2006-01-02", withoutExt[:10])
+ d, err := cast.ToTimeInDefaultLocationE(withoutExt[:10], location)
if err != nil {
return time.Time{}, ""
}
@@ -370,7 +371,7 @@ func (f *frontmatterFieldHandlers) newDateFieldHandler(key string, setter func(d
return false, nil
}
- date, err := cast.ToTimeE(v)
+ date, err := cast.ToTimeInDefaultLocationE(v, d.Location)
if err != nil {
return false, nil
}
@@ -388,7 +389,7 @@ func (f *frontmatterFieldHandlers) newDateFieldHandler(key string, setter func(d
func (f *frontmatterFieldHandlers) newDateFilenameHandler(setter func(d *FrontMatterDescriptor, t time.Time)) frontMatterFieldHandler {
return func(d *FrontMatterDescriptor) (bool, error) {
- date, slug := dateAndSlugFromBaseFilename(d.BaseFilename)
+ date, slug := dateAndSlugFromBaseFilename(d.Location, d.BaseFilename)
if date.IsZero() {
return false, nil
}
diff --git a/resources/page/pagemeta/page_frontmatter_test.go b/resources/page/pagemeta/page_frontmatter_test.go
index 6e3833b0f..653ced59e 100644
--- a/resources/page/pagemeta/page_frontmatter_test.go
+++ b/resources/page/pagemeta/page_frontmatter_test.go
@@ -53,7 +53,7 @@ func TestDateAndSlugFromBaseFilename(t *testing.T) {
expecteFDate, err := time.Parse("2006-01-02", test.date)
c.Assert(err, qt.IsNil)
- gotDate, gotSlug := dateAndSlugFromBaseFilename(test.name)
+ gotDate, gotSlug := dateAndSlugFromBaseFilename(time.UTC, test.name)
c.Assert(gotDate, qt.Equals, expecteFDate)
c.Assert(gotSlug, qt.Equals, test.slug)
@@ -67,6 +67,7 @@ func newTestFd() *FrontMatterDescriptor {
Params: make(map[string]interface{}),
Dates: &resource.Dates{},
PageURLs: &URLPath{},
+ Location: time.UTC,
}
}