【问题标题】:Timezone independent dates javascript时区独立日期javascript
【发布时间】:2021-04-16 05:45:50
【问题描述】:

使用 javascript/react native + redux 我需要以一种时间格式保存时间戳,在保存日期时知道本地时间,但在另一个时区读取相同日期时不知道。

假设一位用户在一天内向西环游世界,每小时保存一个时间戳,所有时区均在当地时间 2021 年 1 月 30 日 18:00 时。在 18:00 产生 24 个时间戳。

以类似于下面的方式使用 isWithinIntervaldate-fns 之类的函数,所有时间戳都应返回 true。

isWithinInterval(
  timestamp,
  {start: new Date(2021,0,30,17,30}, end: new Date(2021,0,30,18,30)}, 
) // -> true

如何做到这一点?最好以 react-redux 兼容(可序列化)的方式。默认情况下,您的日期对象将根据您设备上的本地时间以 UTC 格式保存。

【问题讨论】:

  • en.wikipedia.org/wiki/ISO_8601 2021-01-30T18:00:00+00:00 是包含时区的时间戳格式。您可以将时间戳存储为2021-01-30T18:00:00+00:002021-01-30T18:00:00+01:002021-01-30T18:00:00+02:00,...并删除检查时区。
  • @ThomasSablik — 您走在正确的轨道上,但旅行者必须从 +14(莱恩群岛)的国际日期变更线开始向西而不是向东旅行。从 18:00:00+0 开始向东行驶 1 小时意味着当地时间为 20:00:00+1(区域时间为 1 小时,行程为 1 小时),时间复合。他们取消了向西旅行。 :-)

标签: javascript date react-redux timezone date-fns


【解决方案1】:

我很难理解日期对象,以至于我花了很长时间才明白这个问题实际上是“date-fns-tz”包的全部内容。这就是我目前正在解决的问题:

  1. 创建与本地时间相同的 UTC 时间 使用:
import {zonedTimeToUtc} from "date-fns-tz"
const myDate = new Date()  // eg 2021-02-03 10:00 UTC +5
const localTimeIdenticalUtc = zonedTimeToUtc(localDateObject, localTimeZone)  // 2021-02-03 10:00 UTC +-0
  1. 当我想使用 UTC 日期时,无论我在哪个时区,我都会将其转移回相同的 localDate。
    import {utcToZonedTime } from "date-fns-tz"
    const zonedTimeToUtc(localTimeIdenticalUtc, localTimeZone) // 2021-02-03 10:00 UTC +5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多