はじめに
最近、システム上で日付を選択しても反映されないというバグ報告を受けました。当初は原因がまったく見当つかず、iOSでのみ発生している現象だということすらわかりませんでした。今回は、この問題で自分が実際につまずいた点をメモとして残しておこうと思います。
原因
問題の原因は、new Date() の挙動が iOS と Android で異なることにありました。例えば、20xx-xx-xx 形式の文字列を new Date() で日付に変換しようとした際、iOS と Android では解釈が異なります。具体的には、月や日が一桁の場合に問題が発生します。
iOS:new Date("2024-1-5") のようなフォーマット(YYYY-M-D)では、iOS はこれを適切な日付として解釈せず、Invalid Date エラーを返します。
Android:一方、Android はこの形式でも適切に日付として認識するため、エラーは発生しません。
この違いのため、特に一桁の月や日が含まれる日付を扱う際に、iOS でのみ問題が発生することがわかりました。
対策
この問題は、月や日付を必ず二桁に調整することで解決しました。一桁の月や日は先頭にゼロをつけて 01 や 09 のように二桁にすることで、iOSでも正しく日付が反映されるようになりました。
終わりに
今回、new Date() の挙動が iOS と Android で異なることを知り、非常に勉強になりました。どの OS でも同じ挙動をするように統一してほしいとは思いますが、こうした違いも今後の開発で考慮していきたいと思います。