【问题标题】:Any PHP or MySQL function to get the Unix time without affecting the Timezone在不影响时区的情况下获取 Unix 时间的任何 PHP 或 MySQL 函数
【发布时间】:2014-03-25 08:06:14
【问题描述】:

我在我的数据库中存储了一个时间,例如这个数据:2014-03-25 13:15:00

但是当我在 PHP 中通过 mysql 查询strtotime() 使用 UNIX_TIMESTAMP(date_field) 时,这两个函数的输出都会受到时区的影响。

请告诉我是否有可能在没有时区影响的情况下获得 unix 时间? 如果有人能提供 PHP 函数,那也将非常有帮助。

请不要建议我更改时区,因为这不是一个合适的解决方案。

2014-03-25 14:05:00 转换为 unix 时的当前输出,然后再次转换为日期 2014-03-25 08:35:00

更新

这不仅发生在数据库时间。就像我直接调用它一样: date('Y-m-d H:i:s', strtotime(2014-03-25 14:05:00))

然后输出

2014-03-25 08:35:00

【问题讨论】:

  • 您的服务器设置为哪个时区?
  • 你用什么数据类型来存储时间?
  • 我从未设置过时区,我认为它将是默认时区。 (顺便说一句,我正在使用 WAMP)
  • @hago 我用的是timestamp数据类型,但是这个问题和时区有关
  • 执行UNIX_TIMESTAMP(timestamp_type_column) 不会执行任何时区转换,因为TIMESTAMP 类型的列已经存储在UTC 中。但是,将文字 '2014-03-25 13:15:00' 存储到 TIMESTAMP 类型列 必须 因此从会话的 time_zone 转换为 UTC,这可能是您的问题所指的效果。但是,人们怎么能期望其他呢?

标签: php mysql unix datetime


【解决方案1】:

使用 PHP 你可以使用DateTime:

$date = new DateTime('2014-03-25 13:15:00', new DateTimeZone('UTC'));

echo $date->format('Y-m-d H:i:s'); // 2014-03-25 13:15:00
echo $date->format('U'); // 1395753300

这假设您的数据库中的时间以 UTC 表示。

PHP 5.3 之前

$date = '2014-03-25 13:15:00';
echo gmdate('Y-m-d H:i:s', strtotime("$date GMT"));

【讨论】:

  • 当然,这假设文字实际上是 UTC(我有点怀疑)。 :)
  • 谢谢,我会尝试这个解决方案,但我的大多数用户都没有使用 php5.3(我知道它很旧),但我不得不要求他们更新到 5.3。但确实我会试试这个。
  • @user007 我已经添加了 pre 5.3 版本。
  • 当我使用 gmdate() 但 UNIX 时间仍然不正确时,您的解决方案会输出正确的日期。我已经有了时间戳,我想要正确的 UNIX 时间。感谢您的帮助。
  • strtotime('2014-03-25 14:05:00') 正在输出1395756300
猜你喜欢
  • 2017-02-03
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 2012-10-23
相关资源
最近更新 更多