【Javascript】iPhone Safariで時刻のソートが効かない!
Javascriptを使って、オブジェクトが入ってる配列を「時刻文字列」順にソートしようとしたんです。
そうしたら、PCの「Chrome」ではちゃんと動作したコードが「iPhone Safari」では動作しませんでした・・。
コードは以下のようなもの(time_listの配下にある「timestamp」の時刻でソートします)
time_list.sort(function(a,b){ var t1 = new Date(a.timestamp); var t2 = new Date(b.timestamp); if( t1.getTime() > t2.getTime() ) return 1; if( t1.getTime() < t2.getTime() ) return -1; return 0; });
エラーとなる原因は、iPhone Safariで使える時刻フォーマットに厳しい制限があるためでした。例えば私が使っていた「2016-11-20 12:00:00」みたいな「-」が入った時刻表記はNGみたいです。
(※各種ブラウザで使える時刻フォーマットは以下)
Dateオブジェクト (日付と時刻) | JavaScript プログラミング解説
しょうがないので、私はその場しのぎで「-」を「/」に変換して「2016/11/20 12:00:00」という時刻表記にして対処しました。この表記ならiPhone SafariではOKみたいです。
time_list.sort(function(a,b){ var t1_str = a.timestamp; var t2_str = b.timestamp; t1_str = t1_str.replace(/-/g, "/"); t2_str = t2_str.replace(/-/g, "/"); var t1 = new Date(t1_str); var t2 = new Date(t2_str); if( t1.getTime() > t2.getTime() ) return 1; if( t1.getTime() < t2.getTime() ) return -1; return 0; });
この方法でもアンドロイドで大丈夫なのかとか、他のPCブラウザで大丈夫なのかとか、いろいろ心配ですね・・。
もっとちゃんと確認した方がよいとは思いますが、当面はこれでよしとしておきます・・。
以上です!