MysqlPHP存储并显示正确用户时区的购买时间


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

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

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

两件事:
1) 合并Date&将时间列合并为一个单独的orderDate列作为MySQL日期时间(然后您可以简单地使用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的日期函数来格式化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