0

SQL日時スタンプをフォーマットされた時刻に変換する関数があります。iOSデバイスでは見栄えがしますが、Androidデバイスでは軍事時間として表示されます。これを取得して、Androidデバイスの軍事時間ではなくtoLocaleTimeString()を返すにはどうすればよいですか?

function fromDateString(str) {
    var res = str.match(/\/Date\((\d+)(?:([+-])(\d\d)(\d\d))?\)\//);
    if (res == null)
        return new Date(NaN); // or something that indicates it was not a DateString
    var time = parseInt(res[1], 10);
    if (res[2] && res[3] && res[4]) {
        var dir = res[2] == "+" ? -1 : 1,
            h = parseInt(res[3], 10),
            m = parseInt(res[4], 10);
        time += dir * (h*60+m) * 60000;
    }
    return formatdate.toLocaleTimeString();
}
4

1 に答える 1

6

Date.toLocaleTimeString()関数`は「実装に依存」します。つまり、すべてのデバイスで特定の形式を保証したい場合は、それを自分で適用する必要があります。

これが私がそれをする方法です:

function formatTimeString(date) {
  if ((typeof(date)!=='object') || (date.constructor!==Date)) {
    throw new Error('argument must be a Date object');
  }
  function pad(s) { return ((''+s).length < 2 ? '0' : '') + s; }
  function fixHour(h) { return (h==0?'12':(h>12?h-12:h)); }
  var h=date.getHours(), m=date.getMinutes(), s=date.getSeconds()
    , timeStr=[pad(fixHour(h)), pad(m), pad(s)].join(':');
  return timeStr + ' ' + (h < 12 ? 'AM' : 'PM');
}

formatTimeString(new Date());
// => "09:19:03 AM"
formatTimeString(new Date('2012-12-19T20:09:10-0700'));
// => "08:09:10 PM"
formatTimeString(new Date('2012-12-19T00:13:14-0700'));
// => "12:13:14 AM"
于 2012-12-19T16:12:25.560 に答える