Vercelの変更など
Vercelのロックが解除されたのでCloudflareからまたVercelに戻ってきた。
Cloudflareはどうもビルド失敗が多い。
Trailing slash
以前のURLの末尾がスラッシュだと別の投稿になる問題に対処するためにvercel.json
に末尾に必ずスラッシュがつくようになる設定を加えた。
{ "trailingSlash": true, //これ}
時間の問題
Vercelの日時はUTC時間だが(javascriptのDateは基本的にUTC)ブログ記事のfrontmatterの日時は日本時間なため<time>
タグのdatetime
がUTC時間の日本時刻という未来になりBridgy-Fedに未来時間の投稿をしてしまっていた。
とりあえず以下のように一時対処した。
通知用日時にするためにUTC時刻用変数を2つ用意する。
---const postDate = frontmatter.date ? new Date(frontmatter.date) : new Date("2000-01-01 00:00:00");const updatedDate = frontmatter.updatedDate ? new Date(frontmatter.updatedDate) : new Date("2000-01-01 00:00:00");postDate.setHours(postDate.getHours() - 9);updatedDate.setHours(updatedDate.getHours() - 9);
ブログに表示される日時部分は以下のとおり。
<div class="dateInfo"> { frontmatter.date && ( <span class="postDate"> 作成: <time datetime={postDate.toJSON()}> {new Date(frontmatter.date).toLocaleDateString(SITE_DATE_LANG, { year: "numeric", month: "short", day: "numeric", })} </time> </span> ) } { frontmatter.updatedDate && ( <span class="updatedDate"> 更新: <time datetime={updatedDate.toJSON()}> {new Date(frontmatter.updatedDate).toLocaleDateString( SITE_DATE_LANG, { year: "numeric", month: "short", day: "numeric", } )} </time> </span> ) } </div>
非表示のBridgy-Fed通知用の<time>
タグは以下のようにした。
<div style="display: none;"> <a class="u-bridgy-fed" href="https://fed.brid.gy/"></a> <time class="dt-published" datetime={postDate.toJSON()}> {postDate.toJSON()} </time> </div>
これでブログ上の表記ではfrontmatterのdateを使い日本時間になり、Bridgy-Fedに通知する時間はUTC時間になった。
もっとマシなやり方がありそうだが一応ここまでにしておく。