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

use*_*242 -1 javascript parse-platform

我正在将 Javascript 用于 Parse.com 云代码。根据 Parse.com,他们返回 UTC 时间。我现在是东部夏令时间 (GMT -4)

我试图在午夜获取今天的日期,但没有成功。这是我的代码:

var date = new Date();
var startDay = Math.floor((date.setUTCHours(4,0,0,0) / 1000));
Run Code Online (Sandbox Code Playgroud)

因此,每天晚上 8 点之前,代码会在午夜返回今天的日期,这正是我想要的。但是,晚上 8 点之后,它会在午夜返回明天的日期。我相信原因是由于 UTC 日期在午夜更改为 Today+1。但我不知道如何以在午夜获得当地日期的方式解决这个问题。

PS:我也尝试过setHours(4,0,0,0),没成功。如果我使用setUTCHours(0,0,0,0)它,则会返回今天晚上 8 点的日期

感谢您的帮助。

gre*_*gnr 5

它做的一切都是正确的。

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

但从您的角度来看 (GMT-4),将日期设置为午夜 (UTC) 晚上 8 点 (GMT-4) 似乎向前推进了一天。

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

您可以执行以下操作来确保它返回与用户时区同一天的午夜:

const 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);
Run Code Online (Sandbox Code Playgroud)