やったこと

webサービスを作るときに考えたことを垂れ流します

【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ブラウザで大丈夫なのかとか、いろいろ心配ですね・・。

もっとちゃんと確認した方がよいとは思いますが、当面はこれでよしとしておきます・・。
以上です!