将服务器MySQL时间戳转换为UTC

3
我一直在使用timeago插件(http://timeago.yarp.com/),它在我的本地主机上运行良好,该主机的MySQL将其数据存储在UTC时间戳中,这是插件需要的。
然而,当我将项目上传到服务器时,在MySQL数据库中出现了不同类型的时间戳。我从服务器获取到的时间戳类似于“Thursday, February 24, 2011 4:29 PM”,而我需要的是像“2008-07-17T09:24:17Z”这样的格式。
有没有想法如何使用php转换时间戳?
编辑:数据库中以错误格式存储的时间戳是由mysql自动生成的。
编辑2:它是一个“timestamp”类型的字段,并在向数据库插入行时默认设置为“CURRENT_TIMESTAMP”。

http://stackoverflow.com/search?q=mysql+utc - Orbling
3个回答

4

MySQL的时间戳列在内部存储为UTC时间,但在选择日期时,MySQL会自动将其转换为当前会话时区。

当存储日期时,MySQL假定日期是在当前会话时区中,并将其转换为UTC时间进行存储。

要以UTC格式选择时间戳列

无论当前MySQL会话处于哪个时区:

SELECT 
CONVERT_TZ(`timestamp_field`, @@session.time_zone, '+00:00') AS `utc_datetime` 
FROM `table_name`

您可以将服务器、全局或当前会话时区设置为UTC,然后像这样选择时间戳:
SELECT `timestamp_field` FROM `table_name`

我为你准备好了速查表:MySQL应该将其时区设置为UTC吗? PHP代码
<?php
$pdo = new \PDO($yourconnectionstring);
$sql = "SELECT 
    CONVERT_TZ(`timestamp_field`, @@session.time_zone, '+00:00') AS `utc_datetime` 
    FROM `table_name`";
$stmt = $pdo->prepare($sql);
$stmt->exec();
$timeVal = $stmt->fetchColumn();
if isset($timeVal) {
   $dt = new \DateTimeImmutable($timeVal, new \DateTimeZone('UTC'));
   echo $dt->format(\DateTime::ATOM);
}

3
你在MySQL中得到了一个奇怪的字符串,你确定它是在Datetime字段里吗?
你可以使用以下function从MySQL中获取UNIX时间戳(自纪元以来的秒数),这种格式在多个平台上被广泛接受。
SELECT UNIX_TIMESTAMP( table.datetime_field ) as datetime_field FROM table

使用一些PHP函数,您可以将其转换为所需的格式:

echo date( 'c', $record[ 'datetime_field' ] );

我认为这对您的问题来说已经足够了。

这是一个类型为“timestamp”的字段,当行被插入到数据库中时,默认设置为“CURRENT_TIMESTAMP”。 - Hirvesh

3
在查询中使用 SELECT UNIX_TIMESTAMP('your_date') AS your_date;,在php中使用 $date('whatever_format', $timestamp_from_mysql);

嘿,但我的SQL查询是这样的:SELECT * FROM threaded_comments WHERE parent_id = 0 order by created_at DESC。我该如何在此查询中添加UNIX_TIMESTAMP格式? - Hirvesh
SELECT *, UNIX_TIMESTAMP(column) AS column ... - cypher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接