Javascript在时区之间存储日期

Javascript在时区之间存储日期,javascript,datetime,react-native,Javascript,Datetime,React Native,我一直在寻找解决这个问题的方法,但到目前为止,我还没有找到确切的方法。我有以下问题: 用户在我的react本机应用程序中选择时间。我将其作为datetime存储在SQLite数据库中 用户可以编辑所述存储时间并更新数据库 当用户从输入中选择一个时间时,将根据该时间构造一个日期,并在屏幕上输出该时间,以显示在取消输入后的选择 如果我的用户在一个时区,这一切都正常 不幸的是,如果用户要前往另一个时区,则会调整DB值,并在编辑屏幕上显示错误的时间 因此,如果我在表格中选择以下内容:7:00am My

我一直在寻找解决这个问题的方法,但到目前为止,我还没有找到确切的方法。我有以下问题:

用户在我的react本机应用程序中选择时间。我将其作为
datetime
存储在SQLite数据库中

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

当用户从输入中选择一个时间时,将根据该时间构造一个日期,并在屏幕上输出该时间,以显示在取消输入后的选择

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

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


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

My DB将存储(例如)2017年10月1日07:00:00 GMT+0100(英国夏令时)

但是,如果我将时区移动到东京并在我的应用程序中编辑时间,它将被调整并显示不同的值,即
7:00am

下面是我用来构造传递到DB中的日期的代码:

变量日期=新日期(日期解析('2017-10-01T'+小时+':'+分钟+':00Z');
var_of st=date.getTimezoneOffset()*60000;
date=date.getTime()+\u of st;

(其中存储了
日期

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

我想做的是:

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

  • 当用户选择时间时(例如,
    7:00am
    ),它应该在屏幕上正确显示
  • 应将其正确存储在数据库中(2017年10月1日星期日07:00:00)
  • 如果用户移动时区,我不希望它调整存储的值。(我希望
    7:00am
    是应用程序中使用的时间)
我知道我可以使用字符串操作从数据库中提取存储的时间,并在退出时重新构造日期,但我想知道是否有一种不太老练的方法,不管用户在世界上的什么地方,都能保持选定的时间

我想利用这段时间发送通知,因此如果用户选择早上7:00,他们应该在早上7:00看到通知


更新 我想我已经找到了一个很好的方法,可以使用
moment.js
来管理它,它是React Native中
node\u模块
的一部分

通过使用:
var date=moment('2017-10-01T'+hours+':'+mins+':00Z')。utc().format()

我可以确保我的数据库中存储的日期为:
2017-10-01T07:00:00Z

这意味着它不会被任何偏移数据“污染”,当我把它从数据库中带回来时,我可以使用相同的
时刻
代码重新创建我的非偏移日期时间


初步试验证明使用这种方法是成功的。所有人都欢呼
moment.js

你在这里想得太多了

如果你不想让时间适应时区。。只是不要调整。
时区将您的时间定位到地理位置。你不会想要的


存储所选时间(例如上午7:00
),不带时区,只需将其与本地时间进行比较即可

谢谢-我已经找到了一个使用moment.js处理事情的好方法-请参阅上面的更新