Javascript存储日期之间的时区

时间:2018-01-19 10:36:52

标签: javascript datetime react-native

我一直在寻找解决方案,但到目前为止我还没找到我正在寻找的东西。我有以下问题:

用户在我的react-native应用中选择一个时间。我将它作为datetime存储在SQLite数据库中。

用户可以编辑所述存储时间并更新数据库。

当用户从输入中选择时间时,从中构造日期并在屏幕上输出时间以在解除输入之后显示他们的选择。

如果我的用户在一个时区,这一切都正常。

不幸的是,如果用户要前往另一个时区,则会调整DB值并在编辑屏幕上显示错误的时间。

因此,如果我在表单上选择以下内容:7:00am

我的数据库将存储(例如)Sun Oct 01 2017 07:00:00 GMT+0100 (BST)

但是,如果我将时区移至东京并在我的应用中编辑时间,则会对其进行调整并显示与7:00am不同的值。

以下是我用来构建传递给DB的日期的代码: var date = new Date(Date.parse('2017-10-01T' + hours + ':' + mins + ':00Z')); var _ofst = date.getTimezoneOffset() * 60000; date = date.getTime() + _ofst;

(存储date

现在,我知道偏移会使事情发生偏差,但如果我不使用它,由于我当地的当前时区,我对用户的屏幕反馈会调整为8:00am

我想做什么:

例如,当用户选择上午7:00时:

  • 当用户选择时间(例如7:00am
  • 时,它应该在屏幕上正确显示
  • 它应该正确存储在DB中(Sun Oct 01 2017 07:00:00)
  • 如果用户移动时区,我不希望它调整存储的值。 (我希望{-1}}成为应用中使用的时间)

我知道我可以使用字符串操作从数据库中提取存储的时间并在出路时重新构建日期但是我想知道是否存在一个不那么hacky的方法来维持所选择的时间而不管用户在哪里在世界上。

我希望将此时间用于通知,因此如果用户选择上午7:00,他们应该会在上午7:00看到通知。

更新

我认为我已经找到了一种使用7:00am管理此功能的好方法,它很容易成为React-Native中moment.js的一部分。

使用: node_modules

我可以确保存储在我的数据库中的日期是: var date = moment('2017-10-01T' + hours + ':' + mins + ':00Z').utc().format();

这意味着它不会受到任何偏移数据的“污染”,当我将其从数据库中取出时,我可以使用相同的2017-10-01T07:00:00Z代码重新创建我的非偏移日期时间。

使用此方法证明初始测试成功。所有的欢呼moment

1 个答案:

答案 0 :(得分:1)

你在这里过分思考。

如果您不想花时间调整时区,请不要调整 时区将您的时间固定在地理位置。你不希望这样。

在没有时区的情况下存储所选时间(例如7:00 am),然后将其与当地时间进行比较。