2013-03-28 97 views
0

我正在使用WordPress和jQuery Timepicker。轉換時區偏移小時數到時區偏移(軍方?)小時

的WordPress給出的時區偏移小時:像+2或-3.5

的jQuery Timepicker軍事小時以內偏移:+0200或-0330

我目前使用的是這樣的:

gmt_offset = -4; 
hrs_offset = gmt_offset.replace('-', '-0') + "00"; 

= -0400 

但是,如果偏移量不是單個負數位,則會中斷。

gmt_offset = -3.5; 
hrs_offset = gmt_offset.replace('-', '-0') + "00"; 

= -03.500 //No good... 

need: -0330 

確認!有人能幫我解決這個問題嗎?

+0

如果您嘗試使用「-11」,它也會中斷 –

+0

事實上,-11不是一個負數 – DigitalDesignDj

回答

2

使用.split(".")將偏移量拆分爲2部分。

如果小時部分小於10,則給予小時部分「0」。然後附加負號,如果原本是負值。

var negative = hour < 0 ? true : false; 
hour = Math.abs(hour) < 10 ? "0" + Math.abs(hour) : Math.abs(hour); 
hour = negative ? "-" + hour : "+" + hour; 

要計算分鐘部分,由6

(time[1]*6).toString() 

乘以下面是最終功能:

function convertOffset(gmt_offset) { 
    var time = gmt_offset.toString().split("."); 
    var hour = parseInt(time[0]); 
    var negative = hour < 0 ? true : false; 
    hour = Math.abs(hour) < 10 ? "0" + Math.abs(hour) : Math.abs(hour); 
    hour = negative ? "-" + hour : "+" + hour; 
    return time[1] ? hour+(time[1]*6).toString() : hour + "00"; 
} 
document.write(convertOffset(-3.5)); 

DEMO

+0

這是不是錯過了正偏移的'+'? – Martijn

+0

@Martijn修正了這個問題。感謝您指出。 – Antony

1
function convert(gmt_offset) { 
    var sign ="+"; 
    if(gmt_offset < 0) { 
     sign="-"; 
     gmt_offset *= -1; 
    } 
    var hours = "0"+Math.floor(gmt_offset).toString(); 
    var minutes = "0"+(Math.round(gmt_offset % 1 * 60)).toString(); 
    return sign + hours.substr(hours.length - 2) + minutes.substr(minutes.length - 2); 
} 
+0

我更喜歡你的函數,但我更喜歡頂部只有一個'var'語句。 :) – ErikE

1

這裏有一個很好的壓縮版本:

function militaryGMTOffsetFromNumeric(offset) { 
    var dt = new Date(
     Math.abs(offset) * 3600000 + new Date(2000, 0).getTime() 
    ).toTimeString(); 
    return (offset < 0 ? '-' : '+') + dt.substr(0,2) + dt.substr(3,2); 
} 

例如,militaryGMTOffsetFromNumeric(-3.5)回報-0330

+0

+1但功能名稱太長;) – Antony

+0

易於更改。 :) – ErikE