HUGOのDatetime、日時表示とハンドリングがおかしかったので修正した

背景

このブログではDatetime関連の不具合があり、次のような事象が起きていました。

  • 設定した日時になってもブログ記事が表示されない。
  • 表示される日時がずれる。

これらの問題を解決すべく、テーマや設定ファイルを見直しました。

不具合の特定

不具合は複数の問題により引き起こされている、ということが分かりました。

  • HUGOのコンフィグファイルにタイムゾーンが指定されていなかった
  • 開発環境およびデプロイ環境のタイムゾーンが指定されていなかった
  • HUGOのテーマで指定したdatetimeがローカルのタイムゾーンを参照していなかった
  • datetimeのフォーマット指定が間違っていた
  • ブログ記事に設定する公開日時の記載方法が間違っていた

HUGOのコンフィグファイルにタイムゾーンを指定

configファイルにtimeZoneを設定。私はyamlで管理しているので下記のように指定しました。

1timeZone: Asia/Tokyo

環境にタイムゾーンを指定

各環境にタイムゾーンを指定しました。

1TZ=Asia/Tokyo

HUGOのテーマで指定しているdatetimeがローカルのタイムゾーンを参照するように修正

このブログは私の自作テーマで運用しているのですが、修正前は次のように指定していました。

1# 修正前
2PublishDate.Format

それを下記のように修正しました。

1# 修正後
2PublishDate.Local.Format

datetimeのフォーマットを修正

これも自作したテーマの不具合でした。

1# 修正前
2.PublishDate.Format "2006-01-02"
1# 修正後
2.PublishDate.Format "2006-01-02 15:04:05"

2006-01-02 15:04:05と指定するのがGo言語の習慣なのです😇。

ブログ記事に設定する公開日時の修正

ここまで修正して、もうどこにも修正箇所はないはずなのに、なぜか時刻になってもブログ記事が表示されない。「なんでや〜」と困っていたら、ブログ記事の記載方法が間違っていました。

1# 修正前
2publishDate: "2025-08-10T12:17:56Z"
1# 修正パターン1
2publishDate: "2025-08-10T12:17:56+09:00"
3
4# 修正パターン2(環境でtimezoneを指定している場合)
5publishDate: "2025-08-10T12:17:56"

publishDate: "2025-08-10T12:17:56+09:00"はJSTで記載する場合のルール。環境にタイムゾーンを指定していない場合でも日本時間で扱われます。

タイムゾーンを設定した場合はpublishDate: "2025-08-10T12:17:56"でも大丈夫。

まとめ

不具合は複数の問題により引き起こされていて、修正するのが大変でした。治ってよかったです。