【问题标题】:Converting Server MySQL TimeStamp To UTC将服务器 MySQL 时间戳转换为 UTC
【发布时间】:2011-07-03 13:23:33
【问题描述】:

我一直在使用 timeago 插件 (http://timeago.yarp.com/),它在我的 localhost 上运行良好,它的 MySQL 将其数据存储在 UTC 时间戳中,插件需要这样做工作。

但是,当将我的项目上传到服务器时,MySQL 数据库中出现了不同类型的时间戳。我从服务器收到这样的时间戳:“2011 年 2 月 24 日星期四 4:29 PM”,而我需要这样的时间戳:“2008-07-17T09:24:17Z”

知道如何使用 php 转换时间戳吗?

编辑:数据库中存储格式错误的时间戳是mysql自动生成的。

编辑 2:它是“时间戳”类型的字段,当在 db 中插入行时默认设置为“CURRENT_TIMESTAMP”

【问题讨论】:

标签: php mysql


【解决方案1】:

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`

我在这里做了一个备忘单:Should MySQL have its timezone set to 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);
}

【讨论】:

    【解决方案2】:

    你得到了一个奇怪的 MySQL 字符串,你确定它在 Datetime 字段中吗?

    您可以使用以下 function 从 MySQL 获取 UNIX 时间戳(自纪元以来的秒数),这种格式在多个平台上被广泛接受:

    SELECT UNIX_TIMESTAMP( table.datetime_field ) as datetime_field FROM table
    

    使用一些PHP Functions,您可以将其转换为您想要的格式:

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

    我认为这足以解决您的问题。

    【讨论】:

    • 这是一个“timestamp”类型的字段,当在db中插入行时默认设置为“CURRENT_TIMESTAMP”
    【解决方案3】:

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

    【讨论】:

    • 嘿嘿,但是我的sql查询是这样的:SELECT * FROM threaded_cmets WHERE parent_id = 0 order by created_at DESC 如何在这个查询中添加UNIX_TIMESTAMP格式?
    • SELECT *, UNIX_TIMESTAMP(column) AS column ...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 2019-08-15
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多