Hexoの時間の扱いについてわかったこと
納得がいかなくて色々と調べてみたところ、とても不思議な現象が起きていることがわかった。
date
の読み込みは正しいのだが、UTCの時間のまま _config.yml
に書いてある timezone
の時間として時差が付加される。
具体的に Hexoの日付処理の挙動が意味不明 という記事は date
の値として 2017-09-27T00:18:03-07:00
を指定しているが、出力時に日付を詳細に表示してみると 2017-09-27T07:18:03+09:00
となる。
時間としては 2017-09-27T07:18:03+00:00
となるのが正しい。
ただ、何故かURLの日付は「26」を示していた。
これは、ファイルを生成する時に、26日として認識している、ということだ。
つまり、表示に使用している時間を元にしてファイルを生成しているのだろう。
Hexo
のソースコードを見ていると気になったコードがあった。
|
|
せっかくの momentjs
のオブジェクトを JS の Date オブジェクトに変えている?
ここは普通に考えて momentjs
の方へ処理をまとめるべきでは?
中国はタイムゾーンが一つだった
Hexo
は中国発のソフトウェアということだ。
中国はあれだけ広いので、複数のタイムゾーンがあるだろう、と勝手に思っていた。
つまり、 Hexo
はタイムゾーンについての考慮がされていると思っていた。
これはちゃんと調べてなかったのも悪かったけど、中国はあれだけ広いのにタイムゾーンが一つしかないようだ。
色々と衝撃だ。
タイムゾーンの処理を任せてみる
上記の timezone
は、調べた範囲では、設定で指定している時だけに実行されている。
それならば、ということで、 timezone
の指定をやめてみた。
すると、これまでよりはマシになった。
まず、パーマリンクが UTC
の日付になった。ファイルとURLが一致するようになった。
これまで、23日なのに22日扱いになっていたりしたファイルなどが思っている日付になるようになった。
しかし、表示に使う時間はやはりおかしい。
具体的には 2017-09-27T00:18:03-07:00
という指定が 2017-09-27T07:18:03-07:00
のようになる。
やはりこういう場合は、正しく 2017-09-27T07:18:03-00:00
として認識されて欲しい。
ただ、元々詳細な時間までは表示されていないし、URLの問題は解決したので、ひとまずはこれで良さそう。