Конвертировать время UTC из столбца в MySQL в местное время (Швеция) в выводе PHP

0

Я полностью новичок в PHP, и я работаю над небольшим проектом, чтобы визуализировать номерные знаки наших авторизованных читателей (Openalpr) для наших вилочных погрузчиков, чтобы показать колдунов-лорров, которые прибыли в зону загрузки (зона 2)

Все работает на Ubuntu 16.04.1

Проблема заключается в том, что временная метка номерной таблички, прочитанная в MySQL db, находится в формате времени UTC: 2018-04-05 08:56:33.320000 и я хочу ее по-шведски по местному времени без миллисекунд (CET), например: 2018-04-05 10:56:33

Как я могу это сделать? Вся помощь приветствуется!

Мой PHP-код прямо сейчас:

<?php
require_once 'dbconfig.php';
try {
 $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
 $sql = 'SELECT epoch_time_start,
                best_plate
                FROM front_alprgroup
                ORDER BY epoch_time_start DESC LIMIT 30';
 $q = $pdo->query($sql);
 $q->setFetchMode(PDO::FETCH_ASSOC);
 } catch (PDOException $e) {
  die("Could not connect to the database $dbname :" . $e->getMessage());
 }
 ?>
   <!DOCTYPE html>
<html>
<head>
    <title>Lorrys in Zone 2</title>
</head>
<body>
    <div id="container">
        <h1>Lorrys in Zone 2</h1>
        <table class="table table-bordered table-condensed">
            <thead>
                <tr>
                    <th>Lorry</th>
                    <th>Time</th>
                </tr>
            </thead>
            <tbody>
                <?php while ($row = $q->fetch()): ?>
                    <tr>
                 <td><?php echo htmlspecialchars($row['best_plate']) ?></td>
          <td><?php echo htmlspecialchars($row['epoch_time_start']); ?></td>
           </tr>
                <?php endwhile; ?>
            </tbody>
        </table>
</body>
</div>
</html>

"Необычный" вывод HTML на веб-сервере: Лори в зоне 2 на веб-странице

  • 0
    Смотрите мой обновленный ответ ниже.
Теги:

1 ответ

1
Лучший ответ

Ну вот:

$dateTime = '2018-04-05 08:56:33.320000';
$utc = 'UTC';
$swedish = 'Europe/Stockholm';


$newDateTime = new DateTime($dateTime, new DateTimeZone($utc));
$newDateTime->setTimezone(new DateTimeZone($swedish));
echo $newDateTime->format('Y-m-d H:i:s');

Поэтому я обновил ваш блок кода, добавив вышеуказанный код в качестве функции, а затем воспользуюсь функцией для отображения дат в вашем цикле.

<?php
require_once 'dbconfig.php';

function convertDate($dateTime){

$utc = 'UTC';
$swedish = 'Europe/Stockholm';

$newDateTime = new DateTime($dateTime, new DateTimeZone($utc));
$newDateTime->setTimezone(new DateTimeZone($swedish));
return $newDateTime->format('Y-m-d H:i:s');

}

try {
 $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
 $sql = 'SELECT epoch_time_start,
                best_plate
                FROM front_alprgroup
                ORDER BY epoch_time_start DESC LIMIT 30';
 $q = $pdo->query($sql);
 $q->setFetchMode(PDO::FETCH_ASSOC);
 } catch (PDOException $e) {
  die("Could not connect to the database $dbname :" . $e->getMessage());
 }
 ?>
   <!DOCTYPE html>
<html>
<head>
    <title>Lorrys in Zone 2</title>
</head>
<body>
    <div id="container">
        <h1>Lorrys in Zone 2</h1>
        <table class="table table-bordered table-condensed">
            <thead>
                <tr>
                    <th>Lorry</th>
                    <th>Time</th>
                </tr>
            </thead>
            <tbody>
                <?php while ($row = $q->fetch()): ?>
                    <tr>
                 <td><?php echo htmlspecialchars($row['best_plate']) ?></td>
          <td><?php echo convertDate($row['epoch_time_start']); ?></td>
           </tr>
                <?php endwhile; ?>
            </tbody>
        </table>
</body>
</div>
</html>
  • 1
    Ах, черт возьми, я был на 44 секунды медленнее! Отличная работа
  • 0
    :) Спасибо за отзыв.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню