在 PHP 和 MySQL 中使用时区

2023-12-23

我应该如何处理时区。只为用户存储偏移量是否安全?或者我还应该知道区域/位置吗?当我比较 Wikipedia 和 PHP 中的偏移值时,有些不匹配。我应该相信哪个?

最后我应该如何在 PHP 中处理它。我可以只执行“时间 - 服务器偏移 + 用户偏移”吗?


如果您关心保留所有数据,区域和位置就很重要。 (在我看来)存储日期的最佳方法是存储 UTC 时间戳 + 位置。

对于某些计算来说,仅偏移量可能就足够了,但如果您有时间戳,并且想知道“+1 天”之类的确切时间,则还不够。因为不同国家的情况各不相同,夏令时规则也不同。

因此,如果您想绝对确定自己不会“丢失信息”并且将来无法进行基于时间的计算,请存储 UTC 时间戳和 olson id(例如:欧洲/阿姆斯特丹)。

要回答你的第二个问题,如果你有这两条信息,你可以很容易地用 DateTime 重建它:

$dt = new DateTime('@' . $timeStamp);
// Now convert it to the users timezone
$dt->setTimeZone(new DateTimeZone('Europe/Berlin'));

// Now you have a 'DateTime' object which you can easily display with the ->format function.

Addition

我个人更喜欢将时间戳存储为整数。 TIMESTAMP 类型会自动转换,我觉得最好让 PHP 应用程序处理这个问题,这对于我认为您的用例(用户的简单本地化)特别有意义。

使用 DATETIME 也可以,但存储要求比仅使用整数高得多。如果您确实更喜欢 DATETIME,请尝试在应用程序中制定一条规则,将每个值始终存储为 UTC,因为永远不会出现任何混乱,尤其是与 DST 转换和当地时区法律变更相关的情况。

如果您只想在 Web 应用程序上显示根据用户本地时区计算的时间,则偏移量是无用的。对于大多数国家/地区来说,抵消额每年会发生两次变化,并且几乎每年都会有一两个国家/地区在发生这种情况时发生变化。

仅当您使用 PHP 出色的 DateTime 和 DateTimeZone 对象时才需要该位置。

最后一点建议:

人们往往会混淆 PHP 应用程序中的日期和时间,并以多种不同的格式(字符串、整数等)发送这些值,并混合使用 GMT 和 UTC。尝试为自己制定一条规则只曾经在函数参数和返回值中发送 DateTime 对象,这样您就可以输入提示,并且变量的格式永远不会有任何疑问。这是值得的。

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

在 PHP 和 MySQL 中使用时区 的相关文章

  • MySQL Workbench 忽略外键

    在处理 MySQL Workbench 中的 SQL 编辑器时 我偶然发现了一些奇怪的事情 其中 执行似乎忽略了外键约束 这是一个例子 create database testdb use testdb create table t1 te
  • 在 MySQL 中插入时检查并防止相似字符串

    简要信息 我有3张桌子 Set id name SetItem set id item id position TempSet id 我有一个函数可以生成新的随机组合Item桌子 基本上 总是在成功生成之后 我在中创建一个新行Set表 获取
  • 使用 php ping 网站

    我想创建一个 php 脚本 它将 ping 一个域并列出响应时间以及请求的总大小 这将用于监控网站网络 我尝试过curl 这是我到目前为止的代码 function curlTest2 url clearstatcache return if
  • CakePHP - 选择性 SSL

    如何对网站的某些部分强制使用 HTTPS 例如登录页面或注册页面 并使用 HTTP 来完成网站的其余部分 我最喜欢的强制转换为 https 的方法是将其作为 php 脚本中的第一件事 它可以在 Joomla 中运行 也可以在 CakePHP
  • MySQL 帮助:如何查找客户的所有订单,直到价格 <= 20 且状态='未付款'

    我认为通过提供以下示例可以更好地理解我的问题 我有一个包含以下数据的表 orderid Price username paymentstatus 1 10 john unpaid 2 10 john unpaid 4 10 john unp
  • 在SQL中,如何通过查找与某一列相等的所有行来更新表的每一行,然后将另一列设置为彼此相等

    所以基本上这就是伪代码 但我不知道如何在 SQL 中执行此操作 请帮忙 for each row in table1 loop through each row in table 2 if table1 s row column 1 tab
  • mysql LIKE 查询时间太长

    SQL SELECT COUNT usr id as total results FROM users as usr LEFT JOIN profile as prof ON prof uid usr uid WHERE usr usern
  • 使用 Mock 对 Laravel 5 Mail 进行单元测试

    有没有办法在 Laravel 5 中测试 Mail 尝试了我在互联网上看到的唯一合法的模拟示例 但它似乎只适用于 Laravel 4 下面的当前代码 mock Mockery mock Swift Mailer this gt app ma
  • 管理面板的 htaccess 重写规则

    我的网络应用程序中有这样的 url 模式 www mysitename com foldername controller method 所有请求的页面首先被重定向到根文件夹上的index php 然后处理请求的页面 但每当我进入管理面板
  • PHP括号少IF条件不接受多个语句

    我从来都不喜欢控制结构中的括号 直到今天我才意识到它如何只接受括号内的一条语句而不是 if 条件 如果我有多个语句 它会抛出语法错误 这是 PHP 的工作方式还是我的 IDE 有问题 显然错误很明显 但我只是想确保这是正常的 如果您有任何其
  • php无法在docker-compose中连接到mysql

    这是我的 docker compose version 2 services nginx image nginx 1 11 8 alpine ports 8081 80 volumes code usr share nginx html h
  • 访问 Magento 购物车和/或结帐中的运费

    请注意 这个问题是关于运费 而不是价格 有一个重要的区别 即运输方式为店主支付的费用是多少 而不是客户支付的费用 The shipping tablerate数据库表包括一个cost字段 该字段填充在Mage Shipping Model
  • C++ php 和静态库

    我创建了一个library a 其中包含 cpp 和 h 文件 其中包含很多类 嵌套类和方法 我想在 php 示例中包含这个静态库并尝试使用它 我想提一下 我是 php 新手 我已经在 test cpp 文件中测试了我的 libray a
  • Microsoft VS Code:当我尝试启动程序时,出现错误“spawn php ENOENT”

    我正在尝试在 Microsoft VS Code 上运行 PHP 代码 当我单击启动时 唯一发生的事情是调试控制台中出现错误 生成 php ENOENT 为了解决这个问题 我将 XDebug 的 dll 文件放入 ext 文件夹中 我将 p
  • Laravel 意外错误“类用户包含 3 个抽象方法...”

    在 Laravel 上编写我的身份验证应用程序时 我遇到了一个以前从未见过的错误 我已经集思广益了近一个小时来解决这个问题的原因 但仍然找不到解决方案 Error User 类包含 3 个抽象方法 因此必须声明为抽象方法或实现其余方法 Il
  • 计算特定产品类别的购物车商品数量

    我试图仅从 WooCommerce 中的特定产品类别获取购物车中的商品数量 我正在为一家酒厂做一个网站 它有酒精和非酒精产品 所有葡萄酒都属于 葡萄酒 主类别或类别 ID 34 其下有许多子类别和产品 对于属于此类别的任何商品 我需要知道此
  • 有没有办法在 MySQL 中有效地对 TRUNCATE 或 DROP TABLE 进行 GRANT ?

    我最近在 MySQL 5 5 x 中尝试过 GRANT SELECT INSERT UPDATE DELETE TRUNCATE ON crawler TO my user localhost WITH GRANT OPTION 这会导致错
  • 使用 PHP 将 SVG 图像转换为 PNG

    我正在开发一个网络项目 该项目涉及动态生成的美国地图 根据一组数据为不同的州着色 这个 SVG 文件为我提供了一张很好的美国空白地图 并且很容易更改每个州的颜色 困难在于 IE 浏览器不支持 SVG 因此为了让我使用 svg 提供的便捷语法
  • preg_match 所有以@开头的单词?

    我对正则表达式不太确定 所以我不得不问你 如何用 PHP 判断字符串中是否包含以 开头的单词 例如我有一个像 This is for codeworxx 这样的字符串 我很抱歉 但我没有任何起点 希望你能帮忙 谢谢 萨沙 好的 谢谢你的结果
  • 如何使用 dql 从数据表中获取唯一值?

    我有一个表 其中有一列存储了各种值 我想使用 dql 从该表中检索唯一值 Doctrine Query create gt select rec school gt from Records rec gt where rec city ci

随机推荐

  • 为什么 Xdocument 给我一个 utf16 声明?

    我正在创建一个像这样的 XDocument XDocument doc new XDocument new XDeclaration 1 0 utf 8 yes 当我像这样保存文档时 doc Save c tijd file2 xml 我明
  • Scala method = Trait { ... } 含义

    我正在尝试同时学习 Scala 和 Play 框架 在我看来 Scala 有很多非常酷的想法 但我的挫败感之一是试图理解方法 函数 lambda 匿名函数等的所有不同语法 所以我的主应用程序控制器如下所示 object Applicatio
  • 如何将 MNIST 图像加载到 Pytorch DataLoader 中?

    用于数据加载和处理的 pytorch 教程非常特定于一个示例 有人可以帮助我了解更通用的简单图像加载的函数应该是什么样子吗 教程 http pytorch org tutorials beginner data loading tutori
  • 使用带有 ES6 生成器的 redux-saga 与带有 ES2017 async/await 的 redux-thunk 的优缺点

    现在有很多关于 redux 镇最新的孩子的讨论 redux saga redux saga https github com redux saga redux saga 它使用生成器函数来监听 调度操作 在我开始思考它之前 我想知道使用的优
  • html中可能有“继承”吗?

    假设我的所有 html 页面都有一个内容相同的顶栏和横幅 是否可以让页面从基本 html 页面继承内容 而不是在所有 html 页面上复制这些内容的代码 例如 base html可以有顶栏 横幅等 所有重复的内容 其余页面 index ht
  • 如何获取bash脚本中执行的命令的进程ID?

    我有一个脚本我想同时运行2个程序 一个是c程序 另一个是cpulimit 我想先用 在后台启动C程序 然后获取C程序的PID和将其交给 cpulimit 它也将通过 在后台运行 我尝试在下面执行此操作 它只是启动第一个程序 并且从不启动 c
  • 对存储在数据库中的字符串进行插值

    我们希望在数据库中维护从 ASP NET Web 应用程序发送的电子邮件 这个想法是将电子邮件的格式存储在数据库中 问题是电子邮件应包含订单特定信息 例如 感谢您的订单约翰 史密斯 您的订单1234已收到 我想要实现的是 我在数据库列值中使
  • iOS 应用程序中全局常量存储在哪里?

    我的 iOS 应用程序中的大多数模型都会查询 Web 服务器 我想要一个存储服务器基本 URL 的配置文件 它看起来像这样 production static NSString const baseUrl http website exam
  • 为什么 ResizeObserver 构造函数回调接受条目数组而不是单个条目?

    考虑到ResizeObserver 构造函数 https developer mozilla org en US docs Web API ResizeObserver ResizeObserver 其第一个参数是一个回调 它接受两个参数
  • 如何将MYSQL中的Blob数据转换为Android ImageView

    Android 3 1 API 12 严格来说 这是一个商业应用程序 不会出现在任何其他设备上 我 n00b 正在尝试检索在我们服务器上的 Mysql 中存储为 Blob 的图像数组 并将它们添加到ImageView在 Android 中
  • 在 Django 应用程序中提供静态网页的最佳方式是什么?

    我正在构建一个相对简单的Django http en wikipedia org wiki Django 28web framework 29应用程序 除了应用程序的大部分动态部分所在的主页之外 我还需要一些根本不是动态的页面 About
  • Spring 注释验证 - 检查更新与添加时的唯一性

    我有一个名为 sport 的 POJO 其属性有 sportID sportName 玩家数量 使用带注释的验证 我编写了自己的注释约束来检查数据库中是否已存在 sportName 当尝试添加 sportName 时它效果很好 但是如果我尝
  • VS Code“在终端中运行 Python”播放按钮不起作用

    现在我知道这个问题之前已经被问过 没有找到Python 不带参数运行以从 Microsoft Store 安装 或从 设置 禁用此快捷方式 https stackoverflow com questions 65348890 python
  • Jquery检查图像是否已加载[重复]

    这个问题在这里已经有答案了 可能的重复 图像加载时的 jQuery 回调 即使图像已缓存 https stackoverflow com questions 3877027 jquery callback on image load eve
  • Android PPM编码器音频库

    我需要在 Android 上实现音频 PPM 脉冲位置调制 参考 http en wikipedia org wiki Pulse position modulation http en wikipedia org wiki Pulse p
  • Firebase 连接检查 Android 中的在线离线状态

    如果用户关闭 wi fi 3g 4g 等并反向 无互联网连接 Firebase 数据库名称子连接 true false 因此 当互联网连接 wi fi 3g 4g 等关闭或丢失时 用户就会处于离线状态 因此无法找到他 记住两个场景 之前和之
  • nhibernate Iesi ISet 无法删除()

    我有 2 个由 NHibernate 处理的类 AssetGroup Asset AssetGroup 有一个 ISet assets 集合 AssetGroup 的构造函数会说 assets new HashSet
  • android webview backkey中用于重定向href链接的死循环

    在处理重定向链接时 我在使用后键的 Android webview 应用程序中遇到了死循环 例如 当我的 webview 启动时 它会转到 link0 在link0中 有一个href链接 该链接链接到链接1 链接重定向到链接2 因此 如果我
  • MySQL:合并两个不同的表,无需 JOIN 或 UNION

    我需要合并两个表 两者都有一个主键列日期 但具有不同的值 不同的时间间隔 两者都有不同的 未知 列 我不知道列的名称 两个表中可能出现相同的列名 我不知道有多少列 但都是相同的类型 一个例子 table1 date colA colB co
  • 在 PHP 和 MySQL 中使用时区

    我应该如何处理时区 只为用户存储偏移量是否安全 或者我还应该知道区域 位置吗 当我比较 Wikipedia 和 PHP 中的偏移值时 有些不匹配 我应该相信哪个 最后我应该如何在 PHP 中处理它 我可以只执行 时间 服务器偏移 用户偏移