【发布时间】: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/…