开发者

Converting Server MySQL TimeStamp To UTC

开发者 https://www.devze.com 2023-02-12 23:39 出处:网络
I\'ve been using the timeago plug开发者_如何学JAVAin (http://timeago.yarp.com/), it has been working fine on my localhost, which has its MySQL storing its data in the UTC timestamp, which the plugin n

I've been using the timeago plug开发者_如何学JAVAin (http://timeago.yarp.com/), it has been working fine on my localhost, which has its MySQL storing its data in the UTC timestamp, which the plugin needs to work.

However, when uploading my project to the server, a different type of timestamp is appearing in it MySQL database. I'm getting a timestamp like this: "Thursday, February 24, 2011 4:29 PM" from the server, whereas I need something like this: "2008-07-17T09:24:17Z"

Any idea how to convert the timestamps using php?

Edit: The timestamps stored in the wrong format in the database are automatically generated by mysql.

Edit 2: It's a field of type "timestamp" and default set to "CURRENT_TIMESTAMP" when row is being inserted in db


You are getting a weird string for MySQL, are you sure that it is in a Datetime field?

You can get a UNIX timestamp (seconds since epoch) from MySQL with the following function, this format is widely accepted over multiple platforms:

SELECT UNIX_TIMESTAMP( table.datetime_field ) as datetime_field FROM table

Using some PHP Functions you can convert this to the format you desire:

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

I think this would be sufficient for your problem.


SELECT UNIX_TIMESTAMP('your_date') AS your_date; in a query and
$date('whatever_format', $timestamp_from_mysql); in php


Internally a MySQL timestamp column is stored as UTC but when selecting a date MySQL will automatically convert it to the current session timezone.

When storing a date, MySQL will assume that the date is in the current session timezone and convert it to UTC for storage.

To select a timestamp column in UTC format

no matter what timezone the current MySQL session is in:

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

You can also set the sever or global or current session timezone to UTC and then select the timestamp like so:

SELECT `timestamp_field` FROM `table_name`

I made a cheatsheet here: Should MySQL have its timezone set to UTC?

php code

<?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);
}
0

精彩评论

暂无评论...
验证码 换一张
取 消