【问题标题】:Timestamps are showing server time, not local time时间戳显示的是服务器时间,而不是本地时间
【发布时间】:2012-10-16 23:36:46
【问题描述】:

我有一个网站,用户(在不同的时区)可以在数据库中创建新记录,我目前记录的每条记录都带有创建时间的时间戳...我在 EST 时区,但是当我查看我在网站上创建的记录时,它们以 MST 显示时间,这也恰好是服务器时区...当我查看数据库中的记录时,时间戳字段未转换为 UTC,它改为转换为 mst ......我注意到当我从 phpmyadmin 插入记录时,我使用 datepicker 并选择 18:35:01,但是当我在插入后查看记录时,它显示 15:35 :01!!!这非常令人沮丧,我一直在阅读时间戳字段应该自动转换为 utc,而我没有这样做......另一件事是,我目前正在使用日期函数来格式化时间戳,它显示在 00- 00-00 00:00:00 格式,这给了我一段时间的错误,所以我开始使用 strtotime,这可能是问题的一部分……我不确定……当记录插入数据库时​​,我是使用 null 作为值,因此它将自动使用当前本地时间......但问题是,来自不同时区的不同人将创建记录而不是查看它们的人......所以我需要适应所有这些......关于我做错了什么有什么建议吗?

【问题讨论】:

  • 我将我所有的东西都存储为 epoch 并使用 javascript 在用户当地时间显示。据我所知,php无法自动判断用户所在的时区。
  • 如何将其存储为纪元?
  • 我会将其保存为 int 吗?还是我仍将其存储为时间戳?
  • 我把它存储为一个int,但它现在只能到2038年!
  • 2038 目前不是问题,非常感谢!你知道我在哪里可以找到如何找出用户时区并使用 javascript 进行转换吗?

标签: php mysql phpmyadmin timestamp localtime


【解决方案1】:

您可以设置 PHP 脚本使用的时区

date_default_timezone_set('America/Los_Angeles');

View the PHP Manual for more details

【讨论】:

  • 我试过了,但它不会改变时间......我认为这是因为我从数据库中获取了一个已经在错误时区的字符串......
  • 不要将时间戳存储为字符串 - 有日期和时间类型用于跟踪时间。无论如何,如果数据库中存储了时间,也可以存储时间偏移量。
  • 那么时间戳数据类型有什么用呢?我将它存储为时间戳数据类型,但在 php 中我使用 strtotime 来格式化日期......但由于某种原因它显示了服务器时间
  • 我应该开始使用日期时间吗?我将如何处理日期时间中的时区
  • 尝试将 unix 时间戳存储在一个时区(服务器的时区)中。当您将其从数据库中拉出时,根据当前用户的需要更改时区。我不建议将每个用户的时间存储在他们自己的时区中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
相关资源
最近更新 更多