toLocaleTimeString()返回军事时间

Mik*_*ike 0 javascript date

我有一个函数将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();
}
Run Code Online (Sandbox Code Playgroud)

mae*_*ics 6

Date.toLocaleTimeString()function`是"依赖于实现",这意味着,如果你想保证所有设备上的一定的格式,那么你必须自己应用它.

我是这样做的:

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"
Run Code Online (Sandbox Code Playgroud)