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

时间:2011-05-22 17:39:31

标签: php mysql 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);

3 个答案:

答案 0 :(得分:0)

情侣:
1)巩固Date& amp;将时间列分成单个,比如说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]));

答案 1 :(得分:0)

首先,我会存储time()的值,然后根据需要在适当的时区内转换为字符串。如果用户在旅行时改变他的时区,这会使它更加优雅。

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

Javascript/PHP and timezones

答案 2 :(得分:0)

我会使用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