JavaScript:如何使用纯Javascript将UTC日期时间转换为EST Hours

JavaScript : How do i convert UTC Date Time to EST Hours using pure Javascript?

本文关键字:时间 日期 转换 Hours EST UTC 何使用 Javascript JavaScript      更新时间:2023-09-26

i 将获得非 UTC 合规格式的输入时间格式为"2016-04-10 9:00:00.0"。我需要在时间后附加"T"以使其符合 UTC。我还将在输入中获取时区,例如"-5.00"。有了这些细节,我需要将我的输入时间转换为下午 4 点(作为时区传递的 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中。这是我的问题。

您不应该使用 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;
  }

如果这不是家庭作业,请立即删除所有自定义日期处理代码,并使用库。安装 moment.js 和 moment-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());