⏲️
SimpleDateFormatで年を表すときはyyyy
個人的に関わっているまとめサイト作成のプロジェクトにて、12/31にバグレポートが上がってきました。
内容としては「GASのAPIから取得している日にちが1年後のものになってしまう」というもの。
まとめサイトのURLは、Google SpreadSheetで管理されており、GASで更新日時を取得するAPIを作成しておりました。
どうやら今回はそこのバグだと思われました。
数時間のズレであれば、タイムゾーンとかでは?とか予想が付きますが、1年となるとそういうわけでもなさそうです。
しかも、2021/12/31が2022/12/31になってしまうだけで、他の日にちには問題がないという、すごく気持ちの悪いバグでした。
調べてみると、GASのSimpleDateFormatに問題があることがわかりました。
SimpleDateFormatの年を表すyyyyとYYYYは、大文字と小文字で挙動が違うらしく、大文字で記載をすると、新年度の1月1日と同じ週を表す場合は、翌年として表示されてしまうとのこと。
sample.gs
function myFunction() {
Logger.log(Utilities.formatDate(new Date("2021/12/30"), "JST", "YYYY/MM/dd"));
Logger.log(Utilities.formatDate(new Date("2021/12/30"), "JST", "yyyy/MM/dd"));
}
実行結果
2022/12/30
2021/12/30
ここを知らずに大文字にしてしまうと、年末にだけ現れるバグになってしまうので、年末しっかり休みたかったら、小文字にしましょう。
Discussion