如何将UTC日期/时间转换为EST日期/时间

8

我正在使用以下代码以正确的格式获取当前的UTC时间,但客户回来要求时间戳现在是东部标准时间(EST)而不是UTC。我在Google和stackoverflow上搜索过,但找不到适用于我的现有代码的答案。

var currentdate = new Date(); 
var datetime = currentdate.getFullYear() + ":"
            + ("0" + (currentdate.getUTCMonth()+1)).slice(-2) + ":"
            + ("0" + currentdate.getUTCDate()).slice(-2) + ":"
            + ("0" + currentdate.getUTCHours()).slice(-2) + ":"  
            + ("0" + currentdate.getUTCMinutes()).slice(-2) + ":" 
            + ("0" + currentdate.getUTCSeconds()).slice(-2);

我们所做的是为EST设置一个一致的时间戳,而不管浏览器在世界哪个地方,因此最初使用UTC时间。 谢谢!

是的,除了那个链接不能正确处理夏令时。 - Matt Johnson-Pint
3个回答

15

一些事情...

  • 术语“EST”可以用于北美的东部标准时间或澳大利亚的东部标准时间。大多数时区缩写不是唯一的,因此您应该更加具体。

  • EST也不能完全定义一个时区。它仅定义了在冬季使用的时区的一部分。另一半被称为东部夏令时,缩写为EDT。您的客户可能指的是“东部时间”,这需要考虑到两个部分。

  • 定义时区的典型方法是作为IANA时区数据库中的标识符。您可以在时区标签wiki中阅读更多信息。例如,如果您的客户指的是美国东部时间,则您的时区为“America/New_York”。

  • JavaScript本质上对时区一无所知,除了自己和UTC。(bjb568给出的链接不能正确处理夏令时。)为了在客户端上处理它们,您将需要使用我在此处列出的库之一

  • 您当前的代码在输出方面有点奇怪。通常冒号仅用于分隔时间,而您正在将它们用于所有部分。无论如何,它不会转换任何内容,只是输出UTC。

  • 您可能需要使用像moment.js和其moment-timezone插件这样的库。例如:

  • moment().tz("America/New_York").format("YYYY-MM-DD HH:mm:ss")
    

马特,客户要求使用美国东部标准时间(波士顿,马萨诸塞州),不考虑夏令时的变化。这就是为什么我没有使用任何考虑夏令时的库。至于格式,这将被注入到分析应用程序中,因此格式非常特定,并且必须按照我在这里所示的方式进行。 - Andrew R
1
仅是一些建议,或许你应该验证一下需求。波士顿确实遵循夏令时。我所知道的唯一不考虑夏令时的场景是金融领域(股票交易),而且只在特定情况下。 - Matt Johnson-Pint

4
以下答案(摘自本站的链接)对我非常有效。它可以轻松准确地将以下Zulu时间(与UTC相同)“2014-10-09T20: 30: 54Z”转换为南非时间。
var tmpDate = New Date("enter any valid Date format here")

JavaScript的Date()函数会自动将其转换为您所在地区的本地时间。

示例:

var tmpDate = new Date("Fri Jul 21 02:00:00 GMT 2012")
alert(tmpDate);
//Result: Fri Jul 20 22:00:00 EDT 2012

0

以下代码行可正常工作:

console.log(moment().tz("America/New_York").format("YYYY-MM-DD HH:mm:ss"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接