php - 在数据库中存储时区的正确方法?

标签 php mysql timezone save

让我解释一下:我不是在询问将特定日期时间的时区存储在数据库中的正确方法。我说的是时区本身。例如:

我有一个名为“用户”的 MySQL 表。现在,在这张表上,我希望有一列包含用户居住地的时区(这是由用户提供的,它将从列表中选择)。我正在使用 PHP,它有一个时区字符串列表,如下所示:

List of TimeZones for America

现在,显而易见的解决方案(至少对我而言)是在“用户”表中创建一个 VARCHAR 列,然后将 PHP 使用的时区字符串存储在该列中。

现在我考虑一下,假设我将始终使用 PHP 与该数据库表进行交互,虽然现在确实如此,但将来可能不会如此。而且(如果我错了,请纠正我)PHP 的时区字符串可能不适用于其他编程语言,也许其他语言有自己的“常量”来处理时区。

那么,您将如何将用户的时区偏好保存在 DB 列中?任何想法都会受到赞赏。

注意:PHP 时区的有用之处在于,即使 DST 生效,它们也会自动将其考虑在内,这太棒了。因此,您可以看到我对使用它们的兴趣,而不仅仅是存储数字偏移量。

最佳答案

And (correct me if I'm wrong) PHP's timezone strings probably don't work for other programming languages

好的,我会的。 :)

PHP 实现了 IANA/Olson/TZDB/ZoneInfo database (同一事物的许多名称)。这是最接近行业标准的东西,几乎在所有编程语言和平台中都实现了。

唯一不支持它的操作系统是 Microsoft Windows,因为 Microsoft 维护自己的时区数据库。因此对于以 Windows 为中心的平台,如 .Net,有 libraries如果你想支持那种时区风格,你必须使用它。

timezone tag wiki 中了解更多信息, 或在 Wikipedia .

所以是的 - 您只需将时区 id 字符串存储为 varchar。这是最好的做法。

关于php - 在数据库中存储时区的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15824482/

相关文章:

MySql Select with auto incrementing column not existing in table

ruby - 我可以覆盖 Ruby 中的系统时区吗?

java - 如何更改交互式代理中的时区?

php - 使用数据库列表填充下拉列表

php - 使用 PHP/MySQLI/Apache 时在哪里安全地存储证书/ key ?

javascript - 使用 Node.js 处理多个 MySQL 查询的方法

JavaScript 时区对于过去的夏令时转换规则是错误的

php - 在多个字段中查找多个字符串

javascript - 如何保存页面之间ajax查询的结果

mysql pdo : how to detect if a statement made an insert or updated a preexisting row