首页 > 解决方案 > PDO - 根据用户国家更改日期和时间的显示格式

问题描述

我们为法国创建了一个网站,但我们将向外国用户(美国、德国、中国等)开放。

问题是数据库中保存的所有日期都记录在法语区('Europe/Paris'在我的php.ini文件'datetime'中,mysql中的字段)

网站的所有查询都只是检索日期并显示它们

我正在使用 PDO:

<?php
try {
  $engine = 'mysql';
  $host = 'loclahost;
  $port = '3310';
  $database = 'mydb';
  $user_bdd = 'myuser';
  $password = 'mypwd';
  $dns = $engine.':port='.$port.';dbname='.$database.";host=".$host;
  $bdd = new PDO($dns, $user_bdd, $password);
  $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (Exeption $erreur) {
  die ('Erreur : '.$erreur->getMessage());
}
?>

请求示例:

$request = $bdd->prepare('SELECT date from invoices WHERE id = 1');
$request->execute();
$result = $request->fetch();

结果 :

array (size=1)
  'date' => string '2017-09-22 13:57:09'

在我的 HTML 中:

<div><?= result['date'] ?></div>

如何根据用户更改日期和时间?有没有办法通过修改 PDO 连接直接做到这一点?

知道在数据库中我为每个用户分配了一个国家代码

FR = French
US = American
CZ = Chinese

以美国用户为例,相同的查询将给出:

array (size=1)
  'date' => string '2017-09-22 04:57:09'

标签: phpmysqldatetime

解决方案


如果用户的时区已知,您可以使用 DateTime 将时间转换为另一个时区。

$dtLosAngeles = date_create('2017-09-22 13:57:09',new DateTimeZone('Europe/Paris'))
  ->setTimeZone(new DateTimeZone('America/Los_Angeles'))
;
echo $dtLosAngeles->format('Y-m-d H:i:s'); //2017-09-22 04:57:09

America / New_York 提供不同的时间!如前所述,这些都与 PDO 无关。


推荐阅读