【问题标题】:How to calculate midnight for the local day from UTC time [duplicate]如何从UTC时间计算当地时间的午夜[重复]
【发布时间】:2014-07-06 20:40:17
【问题描述】:

我正在为 Parse.com 云代码使用 Javascript。 根据 Parse.com,他们返回 UTC 时间。我在美国东部时间 (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 点返回今天的日期

感谢您的帮助。

【问题讨论】:

  • 我用谷歌搜索了你的确切标题。我的第一个打击是一个这样的问题,正是在问这个问题。请自行研究,在 Google 上搜索您的问题标题,然后将您的问题作为重复项关闭。
  • always give the asker the benefit of the doubt...不,由你来解释你的尝试
  • 伙计们,在你跳到抨击结论之前,请给 OP(在这种情况下是我自己)怀疑的好处。如果您在 Google 的前 5 页中看到类似的内容,请放心,我试过了。这不是 Javascript 与浏览器。我特别说 Parse.Com 对于将其标记为重复的人,您链接到的解决方案是我已经尝试过的,我在帖子中说过。玩警察前请仔细阅读。
  • @charlietfl 你在发表评论之前读过我的 PS 吗?
  • 我来这里是为了寻求好人的帮助,结果我来到了巨魔之地。确实非常不幸。如果人们无法理解问题并密切关注语言的细微之处(即@djechlin),则需要避免发表评论。这应该是一个建设性的社区,而不是一个 youtube 评论板。

标签: javascript parse-platform


【解决方案1】:

一切都是正确的。

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

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

这是因为当您调用 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);

【讨论】:

  • 谢谢@gregnr。如果我的帖子中不清楚,我深表歉意,但我已经这样做了,它今天晚上 8 点返回。此外,没有用户的时区,因为结果不适合浏览器使用。数据在 Parse.com 云代码中处理
  • 我认为我们需要更多地了解您如何运行此代码。当您进行测试时,您是否在他们的服务器上运行代码?结果如何返回给你看?
  • 代码在他们的服务器上运行,结果填充在他们托管的类中,我可以通过 REST 检索该类。这就是我在帖子中指定 Parse.com 的原因,希望对其服务有经验的人可以提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 2012-10-03
相关资源
最近更新 更多