繁体   English   中英

Mysql PHP为正确的用户时区存储和显示购买时间

[英]Mysql PHP Store and display time of purchase for the correct users timezone

我有一个设置,我想将购买时间精确到秒。 截至目前,我为此使用CURTIME()。 现在,它以16:03:59的格式返回时间,如果我想存储然后在正确的时区(如2:03 pm)显示时间,该怎么办? 谢谢。

$qry = "INSERT INTO purchases
   (id, qty, Date, Time, product_id, totalprice)
   VALUES('$id', '$qty', CURDATE(), CURTIME(),'$pid', '$price')";
$result = @mysql_query($qry);

几件事情:
1)将Date&Time列合并为一个MySQLDate-time的单个orderDate列是有意义的(然后您可以简单地将NOW()用作插入值)

2)PHP具有出色的文档: http : //php.net/manual/en/function.date.php

要为UTC时区网站访问者设置时区:

date_default_timezone_set('UTC'); // replace with variable, probably stored in user's session

顺便说一句,不确定MySQL是否提供即时设置时区(可能设置为服务器默认值),因此您可能必须使用上述php的date函数格式化orderDate。

因此,总而言之,在使用$ q的查询结果循环中,显示内容可能是:

echo date("Y-m-d h:i:s", strtotime($q[''orderDate]));

首先,我将存储time()的值,然后根据需要在适当的时区中将其转换为字符串。 例如,如果用户在旅行时更改自己的时区,这将使其更加优雅。

要格式化用户的时区,您可以使用Javascript获取时区,然后将其传递给PHP并进行相应的格式化。 之前已被问过/回答过:

Javascript / PHP和时区

我会使用UTC_TIMESTAMP将您的时间值存储在UTC中,然后使用ISO日期格式获取它们:

SELECT DATE_FORMAT(UTC_TIMESTAMP, GET_FORMAT(DATETIME, 'ISO'));

之前运行的结果为:

2011-05-22 17:53:23

假设用户位于西海岸,我们可以执行以下操作以使其本地时间为:

$timeZone = 'America/Los_Angeles';
$dateSrc = '2011-05-22 17:53:23';

$dateTime = new DateTime($dateSrc, new DateTimeZone('GMT'));
$dateTime->setTimeZone(new DateTimeZone($timeZone));
echo "Result is: " . $dateTime->format('Y-m-d H:i:s');

样品运行:

$ php test.php 
Result is: 2011-05-22 10:53:23

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM