javascript - 当您的服务器位于不同时区时,如何对时区特定数据执行操作?

标签 javascript node.js database datetime momentjs

我无法理解服务器如何处理时区特定操作并向用户呈现本地信息。我读到您永远不需要存储用户本地时区,而只需将日期存储在 UTC 偏移时间戳中。

例如,我有一个位于加利福尼亚州的用户,但我的服务器位于纽约。我构建了一个日历应用程序,需要显示此人今天从午夜到午夜(含)的所有约会。我在数据库中查询所有约会,服务器生成 2 个日期,如下所示:

let date_1 = moment().startOf('day').utc();
let date_2 = moment().endOf('day').utc();

问题当然是 date_1date_2 都是首先根据纽约时间生成的,比加利福尼亚时间早 4 小时,所以即使我运行如下查询: SELECT * FROM some_table WHERE somedate BETWEEN date_1 AND date_2; 我最终得到的数据仍然不是用户所要求的。

我不需要知道该人的时区吗?还是我应该以前端不能简单地请求数据而必须提供 2 个日期的方式构建 api?服务器尝试计算用户请求的天数是否错误?

最佳答案

使用时间戳值存储在数据库中。 Get current timestamp 。 由于时间戳值总是唯一且通用的,因此为了获得正确的时区,您需要在前端处理它,

Date.now()
>> 1539606894329
new Date(1539606894329)
>> Mon Oct 15 2018 18:04:54 GMT+0530 (India Standard Time)

Conversion of the same timestamp for different timezone

关于javascript - 当您的服务器位于不同时区时,如何对时区特定数据执行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52815473/

相关文章:

javascript - 如何在iPhone上使用windowScriptObject?

javascript - 安装 npm 包 weexpack 时校验和验证失败

sql - 如何在 SSMS 2012 中创建 UNIQUE 约束

mysql - 哪里用MongoDB,哪里用MySQL?

javascript - 我的 for 循环正在创建项目符号对象但没有将它们渲染到屏幕上

javascript - 用给定的数组 react redux 合并状态

javascript - 在 TypeScript 中隐式扩展 JavaScript 类属性

android - Cordova - 命令的错误代码 1 |命令失败

node.js - sails js 中的 500 内部服务器错误

php - 显示 MySQL 数据库的结果数