2012-12-19 29 views
0

我有一個將SQL日期時間戳轉換爲格式化時間的函數。它在iOS設備上看起來不錯,但在Android設備上顯示爲軍事時間。我怎麼能得到這個返回toLocaleTimeString()作爲不是在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(); 
} 
+0

也許Android設備被設置爲使用24小時時鐘? –

回答

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" 
+0

我該怎麼做?我想把它分解成幾個小時和幾分鐘,但Date對象不能使用長度函數,而且長度函數不能和​​Date對象 – Mike

+0

一起使用。謝謝! – Mike

相關問題