如何从UTC时间[重复]计算本地日的午夜

问题描述 投票:-1回答:1

我正在为Parse.com云代码使用Javascript。根据Parse.com,他们返回UTC时间。我在EDT(GMT -4)

我正试图将今天的日期设为午夜,但无济于事。这是我的代码:

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

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

PS:我也徒劳地尝试了setHours(4,0,0,0)。如果我使用setUTCHours(0,0,0,0),它将返回今天晚上8点的日期

谢谢您的帮助。

javascript parse-platform
1个回答
4
投票

它所做的一切正确。

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

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

这是因为当您呼叫date.setUTCHours()时,它将首先将该时间转换为UTC,然后设置小时数。如果您在格林威治标准时间5月18日,晚上8点创建日期,然后调用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);
© www.soinside.com 2019 - 2024. All rights reserved.