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