如何从UTC时间计算当地时间的午夜

时间:2014-05-19 01:00:41

标签: javascript parse-platform

我正在使用Javascript for Parse.com Cloud Code。 根据Parse.com,他们返回UTC时间。我在EDT(GMT -4)

我试图今天午夜的时间到达无效。 这是我的代码:

var date = new Date();
var startDay = Math.floor((date.setUTCHours(4,0,0,0) / 1000));

所以每天晚上8点之前,代码会在今天午夜返回,这就是我想要的。但是,晚上8点之后它将在明天的午夜返回。我相信原因是由于UTC日期在午夜变为今天+ 1。但是我无法弄清楚如何解决这个问题,以便我在中午获得当地日期。

PS: 我也徒劳地试过setHours(4,0,0,0)。 如果我使用setUTCHours(0,0,0,0),则会在今天晚上8点返回

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

它正确地做了一切。

从UTC的角度考虑一下。 setUTCHours(0,0,0,0)将始终将其设置为当天的午夜。

从您的角度来看(GMT-4),将日期设定为晚上8点(格林威治标准时间-4)的午夜(UTC)似乎要前进一天。

这是因为当您调用date.setUTCHours()时,首先将该时间转换为UTC,然后设置小时数。如果您在 5月18日晚上8点GMT-4 创建日期,然后调用setUTCHours(),它将首先将该日期转换为 5月19日,UTC时间上午12点。然后它将执行小时更改。

您可以采取以下措施来确保它在用户的时区当天午夜返回:

var date = new Date();

//Convert to midnight in your timezone first
date.setHours(0,0,0,0);

//Convert to midnight UTC
date.setUTCHours(0,0,0,0);

了解你的观点是非常重要的。