2014-05-19 79 views
-2

我对Parse.com Cloud Code使用JavaScript。 根据Parse.com,他们返回UTC时间。我在EDT(格林威治标准时间-4)如何从UTC时间计算当地午夜时间

我试图得到今天的午夜的日期无济于事。 这里是我的代码:

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

所以在每天晚上8点之前,该代码在午夜返回今天的日期是我想要的。然而,晚上8点以后,它会在明天的午夜返回。我相信原因是由于UTC日期在午夜变为Today + 1。但我不知道如何解决这个问题的方式,我得到我的本地日期在midgnight。我也试过setHours(4,0,0,0)徒劳。 如果我使用setUTCHours(0,0,0,0)它返回今天的晚上8点的日期

谢谢你的帮助。

+0

我使用了Google搜索的确切标题。我的第一个打击是一个SO问题,正是这个问题。请做你自己的研究,谷歌你的问题标题,并关闭你的问题作为重复。 – djechlin

+0

'总是给予提问者怀疑的好处......不,这是对你的解释你已经尝试过的东西 – charlietfl

+0

伙计们,在你跳到抨击结论之前给OP(我自己在这种情况下)怀疑的好处。如果您在Google的前5页看到类似内容,请放心,我试了一下。这不是Javascript vs浏览器。我特别说Parse.Com 无论谁将其标记为重复,您链接到的解决方案是我已经尝试过,我在我的帖子中说过。打警察之前请仔细阅读。 – user3522242

回答

3

它做的一切正确。

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

从您的观点来看,虽然(格林威治标准时间4),将日期设置为晚上8点(格林威治标准时间-4)的午夜(UTC)似乎过去了一天。

这是因为,当你调用date.setUTCHours(),它第一转换到时候UTC,THEN设置小时。如果您创建日期为(5月18日,格林威治标准时间UTC-4),那么请致电setUTCHours(),它将首先将该日期转换为,时间为UTC。然后它会执行小时更改。

这里是你可以做什么,以确保它在同一天为用户的时区返回午夜:

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); 

知道谁的角度你试图适应这一点很重要。

+0

谢谢@gregnr。我很抱歉,如果在我的文章中不清楚,但我已经完成了,并且今天晚上8点返回。此外,没有用户的时区,因为结果不是浏览器消费。数据在Parse.com处理Cloud代码 – user3522242

+0

我想我们需要更多地了解您如何运行此代码。当你测试时,你是否在服务器上运行代码?结果如何返回给你看? – gregnr

+0

代码在其服务器上运行,结果填充到它们托管的类中,我可以通过REST检索它们。这就是为什么我在我的文章中指定Parse.com希望有经验的人可能会有所帮助。 – user3522242