2016-03-04 79 views
0

我將以非UTC合規格式獲得輸入時間格式爲「2016-04-10 9:00:00.0」。我需要在時間後附加「T」以使其符合UTC。我還會在輸入中獲得時區,例如「-5.00」。有了這個細節,我需要將我的輸入時間轉換爲下午4點(作爲TimeZone傳遞的EST時間)。JavaScript:如何將UTC日期時間轉換爲使用純Javascript的EST時間?

我不能使用任何第三方庫。

HTML

<h1> 
TimeZone 
</h1> 
<h2 id="hourValue"> 

</h2> 
<table> 
<tr> 
    <td>Date Time</td> 
    <td><input type="text" id="txtDate" value="2016-04-10 09:00:00.0" /></td> 
</tr> 
<tr><td>TimeZone</td></tr> 
<tr><td><input type="text" id="txtOffset" value="-5.00" /></td></tr> 
<tr><td><input type="submit" id="btnSubmit" value="Convert" onClick="myTime()" /></td></tr> 
</table> 

JavaScript 
function myTime() 
{ 

var d1= document.getElementById("txtDate").value; 
var zOffset = document.getElementById("txtOffset").value; 
console.log("Date1",d1); 

var d2 = new Date(d1.replace(/ /g,'T')); 

var d3= d2.getTime()+(d2.getTimezoneOffset()*60000); 

console.log("Date2",d2); 
console.log("Date3",d3); 
var d4 = new Date(d3 + (3600000 * zOffset)); 

console.log("Date3",d3); 
console.log("Date 4",d4); 

var d5 = d4.toLocaleString(); 
console.log("Date 5",d5); 

d6 =d5.match(/(\d+)(?=:\d+:\d+)|([A-Z]+)(?=$)/g).join(" "); 

console.log("Date6",d6) 

document.getElementById("hourValue").innerHTML = d6.value; 
} 

我在評論區下面給出的jsfiddle鏈接,小提琴工作正常在FF而不是在IE中。這是我的問題。

+0

http://momentjs.com/ – Mike

+0

的jsfiddle鏈接,上述代碼:https://jsfiddle.net/etpo99ua/31/。這jsFiddle不工作在Internet Explorer中,並在Firefox中工作正常 – user5970552

回答

0

如果這不是作業,請立即刪除所有自定義日期處理代碼,並使用庫。安裝moment.js和矩timezone.js,和你的代碼將成爲類似:

moment.tz.add("America/New_York|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6"); 

console.log(moment.tz(utcTimeString, "America/New_York").format()); 
+0

這些古怪的字符是什麼? –

+0

只是'時間 - 時區'的有趣的數據包裝格式:http://momentjs.com/timezone/docs/#/data-formats/ – user2926055

+0

我明白了。認爲這是二進制的片刻。 –

0

你不應該與Date構造解析字符串,這是不可靠的,在很大程度上取決於執行。 IE 8不會像字符串那樣解析ISO 8601。

像「2016-04-10 9:00:00.0」這樣的字符串可以通過獲取數字並將它們傳遞給Date構造函數來輕鬆解析。然後應用一個偏移量也是直接的(你正在做的是好的,但如果你喜歡它可以包含在分析函數中),請參見下面的函數。在IE 8中有效的工具也可以在其他地方使用。

我假設你的偏移量是±h.mm,但它可能是十進制小時,在這種情況下只需修改偏移量部分(或單獨應用)。我將分鐘直接應用到分鐘值而不是時間值。

但是,任何此類函數都應該驗證這些值,並在出現錯誤時返回相應的錯誤消息。

// Date string like: 2016-04-10 09:00:00.0 
 
// Offset like: -5.00 assuming h.mm 
 
function parseString(dateString, offset) { 
 
    var b = dateString.split(/\D+/); 
 
    var o = (offset < 0? -1 : 1) * 
 
      (Math.abs(parseInt(offset)*60) + +(offset.replace(/^.*\.(\d+)$/,'$1'))); 
 
    return new Date(Date.UTC(b[0], b[1]-1, b[2], b[3], +b[4]-o, 
 
          b[5], (b[6]+'00').slice(0,3))); 
 
} 
 

 
// Sample values 
 
var dateString = '2016-04-10 09:00:00.0' 
 
var offset = '-5.00'; 
 
var d = parseString(dateString, offset); 
 
document.write(
 
'<br>Time : ' + dateString + 
 
'<br>Offset: ' + offset + 
 
'<br>Local : ' + d);
body { 
 
    font-family: courier, monospace; 
 
    white-space: pre; 
 
    }

相關問題