【问题标题】:PDO - Change the display format of dates and time according to the user countryPDO - 根据用户国家更改日期和时间的显示格式
【发布时间】:2020-10-01 14:32:40
【问题描述】:

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

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

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

我正在使用 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'

【问题讨论】:

  • 这不是数据库的问题。理想情况下,数据库应以 UTC 格式存储时间,但这也取决于您的设计和要求。时间应根据用户的区域设置显示给用户,这意味着您需要在客户端或 UI 层中执行。这与 PDO 无关
  • 国家代码也无法帮助您了解时区。许多国家/地区使用多个时区。
  • 非常重要:如果您不打算恢复,请不要捕获 PDO 异常。不要直接向用户显示错误消息。您需要删除该 try-catch
  • @Dharman 谢谢你的尝试,我会删除它。那么,我该怎么做才能改变这个显示呢?
  • 要么向用户询问首选时区并将该个性化设置存储在数据库中,要么使用他们的浏览器设置和 JavaScript 将 UTC 时间转换为本地时间。这些只是建议。您需要自己研究这个广泛的主题。这也是一篇很好的文章,推荐大家阅读全文codeblog.jonskeet.uk/2019/03/27/…

标签: php mysql datetime


【解决方案1】:

如果用户所在的时区已知,则可以使用 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

美国/纽约提供不同的时间! 如前所述,这些都与 PDO 无关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2021-07-12
    • 2011-08-07
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多