如何处理服务器和客户端之间的时区?

2024-04-05

我正在开发一个网站,我必须处理用户可能存在的不同时区。这成为一个大问题,因为该网站举办拍卖等时间敏感的活动。

服务器上的所有日期/时间均采用 UTC 格式。数据库以 UTC 时间戳存储所有内容。 PHP 默认时区也设置为 UTC (date_default_timezone_set('UTC');).

现在,我的问题是我应该如何与用户交互,无论我只显示日期,还是更重要的是,我正在从用户输入中读取日期/时间。

一个具体的例子:

  • 拍卖有一个截止日期,我将其以 UTC 形式存储在数据库中。
  • 当我在网站上查看拍卖时,JavaScript 计时器使用Date对象来计算剩余时间。它会自动将时区转换为 GMT+0100(我的本地时区)。所以如果截止日期是'2013-08-08 10:46:08'(UTC),javascript日期对象将返回Aug 08 2013 11:26:15 GMT+0100 (GMT Standard Time).
  • 如果当前时间大于 11:46:08,则计时器表示剩余时间为 00:00(这是正确的)。
  • 但是,如果我尝试插入出价,服务器会接受,因为MySQL INSERT评估为true:

    插入出价...哪里...和auction_deadline > NOW() ...

(因为拍卖截止日期='2013-08-08 10:46:08'现在()='2013-08-08 10:26:50')

所有这些时区的胡言乱语融化了我的大脑。我在这里缺少什么?我几乎可以肯定,在数据库中以 UTC 格式存储所有日期/时间是最好的。我只是想不清楚如何在用户和数据库之间处理它。


您的问题根本不涉及时区,而只是客户可以转动时钟或使时钟大幅倾斜这一事实。为此,修复方法是每隔一段时间轮询一次服务器,以获取用于计算的偏移修复。

事实上,您甚至不需要日期对象。拍卖结束时有一个普遍存在的时刻。假设它是1375960662823。现在,通用时刻是1375960669199,因此我们看到拍卖在 6 秒后结束(1375960662823 - 1375960669199 ~ 6000)。无论我在摩洛哥还是日本,都会在 6 秒内结束。你明白了吗?

要生成这些数字,您可以在客户端调用var now = Date.now() + skewFix where skewFix是在客户端出现时间偏差或手动将计算机设置为错误时间时需要应用的更正。

在 PHP 中,您可以使用以下命令生成它$now = time() * 1000;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理服务器和客户端之间的时区? 的相关文章

随机推荐

  • 如何在打字稿中将 Observable 中存储的值转换为字符串?

    您好 我是 Angular 和 TypeScript 的新手 我需要一个值Observable在字符串的格式中 如何做到这一点 BmxComponent 文件 export class BmxComponent asyncString th
  • 组件加载时如何设置角度垫选择值?

    我使用了有角的材料 角度 材料 7 1 0 mat select box 然后我使用表单控件而不是 ng model 现在的问题是我无法在组件加载时设置值 我需要将第一个值设置为列表中的 mat select box 我尝试过 但我做不到
  • Gradle 不包括 FXML 和图像

    我一直在寻找将 FXML 和图像包含在build gradle以便将它们构建到罐子中 我有看here https stackoverflow com questions 21128652 location is required in ja
  • 比较数据网格中同一行的两个单元格

    使用 C NET 4 5 MS Visual Studio 2012 WPF 你好 刚刚让这段代码终于起作用了 它基本上是通过数据网格进行迭代来进行行的 请注意 他可能会冒犯所有 WPF 奇才 public IEnumerable
  • 如何下载 Telegram 群组的聊天记录?

    我想下载 Telegram 公共群组中发布的聊天记录 所有消息 我怎样才能用Python做到这一点 我在API中找到了这个方法https core telegram org method messages getHistory https
  • 使用 ssh-keygen 创建 JSch 接受的 SSH 私钥 [重复]

    这个问题在这里已经有答案了 不是直接的编程问题 但有某种相关性 JSch Java SSH 库 似乎不允许 macOS 10 14 使用以下命令创建私钥 ssh keygen t rsa b 4096 我应该使用什么命令来创建具有这种格式的
  • 需要一个支持自动布局的可视化java库

    我需要一个用于可视化的 java 图形库 我可以将其合并到我自己的应用程序中 我发现 jgraph 非常适合可视化 但需要明确定位节点 有没有支持自动布局的开源java图形库 任何建议都会对我非常有帮助 有许多软件包可以做到这一点 如果你习
  • 如何在 Haskell 中获取 Maybe 的值

    我对 Haskell 比较陌生 并开始阅读 Real World Haskell 我刚刚偶然发现了 Maybe 类型 并且有一个关于如何从 a 接收实际值的问题Just 1例如 我编写了以下代码 combine a b c eliminat
  • 使用 npm 安装 Angular-cli 时出错

    当我尝试使用 npm 安装 Angular cli 时 出现错误 代码为 ETIMEDOUT 我尝试删除代理 代理和 HTTP 代理 尝试在管理模式下运行 cmd 更改 Nodejs 目标的路径 npm ERR code ETIMEDOUT
  • document.documentElement.scrollTop 返回值在 Chrome 中有所不同

    我正在尝试根据 处理一些代码document documentElement scrollTop 价值 它返回 348 在 FF 和 IE 中 但在 Chrome 中它返回 0 我需要做些什么来克服这个问题吗 FF gt gt gt doc
  • 具有 Visual Studio 编辑器功能的独立文本编辑器

    有人知道任何具有 Visual Studio 编辑器功能的文本编辑器吗 具体来说 我正在寻找以下功能 CTRL C 行中任意位置 未选择任何文本 gt 复制整行 在线任意位置按 CTRL X 或 SHIFT DEL 未选择任何文本 gt 剪
  • Perl 逐行读取

    我有一个简单的 Perl 脚本来逐行读取文件 代码如下 我想显示两行并打破循环 但这不起作用 错误在哪里 file SnPmaster txt open INFO file or die Could not open file count
  • 将ArrayList数据传递到android中的SOAP Web服务

    您好 我需要将数组列表数据传递到soap web 服务中 到目前为止 我有以下代码 public class ResultActivity extends Activity public final String NAMESPACE pub
  • 在 iOS 上发送 HTTP POST 请求

    我正在尝试使用我正在开发的 iOS 应用程序发送 HTTP Post 但推送从未到达服务器 尽管我确实收到了代码 200 作为响应 来自 urlconnection 我从未收到服务器的响应 服务器也没有检测到我的帖子 服务器确实检测到来自
  • 为什么fork后关闭文件描述符会影响子进程?

    我想通过单击按钮在linux中运行程序 因此我编写了一个函数execute void execute const char program call const char param pid t child vfork if child 0
  • 对灰度 NSImage(或 CIImage)进行着色

    我有一个灰度图像 我想用它来绘制 Cocoa 控件 图像具有不同的灰度级别 在最暗的地方 我希望它绘制最暗的指定色调 我希望它在源图像是白色的地方是透明的 基本上 我想重现在 iPhone 上的 UINavigationBar 中看到的ti
  • Flutter中下拉刷新

    我的仪表板代码如下所示 这里我在 getReport 方法中做 get req 我添加了RefreshIndicator在代码中 当在容器内下拉时应该进行刷新 我正在调用我的 getData 但我没有得到刷新的内容 我在下面添加我的代码 如
  • 为什么 C++11 中需要添加尾随返回类型? [复制]

    这个问题在这里已经有答案了 我终于开始阅读c 11 questions tagged c 2b 2b11我不明白为什么需要尾随返回类型 我遇到了以下示例 该示例用于突出问题 template
  • Chrome 新标签页事件

    我想在 Chrome 中创建新选项卡时触发一个事件 我以为下面的内容可以做到这一点 但似乎不行 初学者 清单 json name My First Extension version 1 0 description The first ex
  • 如何处理服务器和客户端之间的时区?

    我正在开发一个网站 我必须处理用户可能存在的不同时区 这成为一个大问题 因为该网站举办拍卖等时间敏感的活动 服务器上的所有日期 时间均采用 UTC 格式 数据库以 UTC 时间戳存储所有内容 PHP 默认时区也设置为 UTC date de