javascript 如何将UTC时间转换为本地UNIX时间

nvbavucw  于 2023-05-05  发布在  Java
关注(0)|答案(2)|浏览(192)

我正在做一个带有调查组件的React应用程序。如果用户单击跳过调查按钮,则在n天(或小时)后,调查应再次出现。被拒绝的时间是在UTC格式来自后端时,应用程序正在加载。
我想做一个函数,比较UTC中的拒绝日期和本地日期(用户可以来自世界各地),如果它返回true,则呈现调查组件。
问题是将UTC日期转换为UNIX(毫秒?)与locale日期进行比较。我该怎么做?

const shouldShowSurvey = (rejectedDateUTC, repeatIntervalMs) => {
  // rejectedDateMs is a UTC unix time
  const rejectedDateMs = new Date(rejectedDateUTC).getTime();
  const now = new Date().getTime();

  return rejectedDateMs + repeatIntervalMs < now;
};

shouldShowSurvey("2023-05-03T13:02:08.107402", 5000);
qojgxg4l

qojgxg4l1#

您应该添加Z作为UTC日期的ISOString的后缀,以便属于正确的UTC格式。

const shouldShowSurvey = (rejectedDateUTC, repeatIntervalMs) => {
  // rejectedDateMs is a UTC unix time
  const rejectedDateMs = new Date(rejectedDateUTC+'Z').getTime();
  const now = new Date().getTime();
  return rejectedDateMs + repeatIntervalMs < now;
};

console.log(shouldShowSurvey("2023-05-03T13:02:08.107402", 5000));

这是Phuzi的功劳。

wpcxdonn

wpcxdonn2#

你可能误解了Javascript Date对象的工作原理。
Date对象本质上是一个 Package 器,其中包含一些关于毫秒UTC整数时间戳的启示,这就是Date.prototype.getTime返回给您的内容。总是这样。
有没有这样的事情作为一个“本地日期”与。“utc日期”,它们都是 * 所有 * UTC日期,但其中一些方便的方法(例如,toStringtoLocaleString)将返回转换为用户本地时区的UTC日期的 * 字符串表示 *,因为本地/字符串表示是 * 用户 * 关心的,而不是 * 程序员 *。
唯一的区别(以及你遇到的问题)是走另一条路:即从字符串表示到Date对象。如果你,程序员,不提供一个字符串的时区,它将不得不猜测,并根据字符串的格式,它有时会被解释为一个字符串的本地时间(例如。new Date('2023-05-02T00:00:00');),有时被解释为UTC的字符串(例如new Date('2023-05-02');)。
您可以记住所有晦涩难懂的、可能是实现定义的关于日期字符串解析的规则…或者,您可以在解析字符串时提供显式的时区,然后得到的Date对象将明确无误。一旦你正确地解析了它,所有标准的数学比较(比如><)都将在Date对象上起作用。

相关问题