我在佛罗里达州的一个客户有一个网站托管在德克萨斯州休斯顿的服务器上。他对数据库中的所有报告晚了一个小时才出来感到不安。要将记录插入数据库,请使用 MySQL 函数 time(),然后使用标准 SELECT 语句从数据库中取出记录。有没有一些简单的方法可以修改 INSERT 语句或 SELECT 语句以使用正确的时区。
这里是创建 INSERT 语句的位置:
$query_rsCWAddOrder = sprintf("INSERT INTO tbl_orders
(order_ID, order_CustomerID,
order_Tax, order_Shipping, order_ShippingTax,
order_Total, order_Status,
order_ShipMeth_ID, order_Address1,
order_Address2, order_City,
order_Zip, order_Country,
order_State, order_TransactionID,
order_Date, order_ShipName, order_DiscountID,
order_DiscountAmount, order_Comments)
VALUES ('%s','%s',%s,%s,%s,%s,'%s',%s,'%s','%s','%s','%s','%s','%s','%s',now(),'%s',%d, %s, '%s')",
$thisOrderID
, $_SESSION["customerID"]
, mySQLFloat($cart["CartTotals"]["Tax"] )
, str_replace('$', '', $_SESSION['SHIPPING_TOTAL'])
, mySQLFloat($cart["CartTotals"]["ShippingTax"] )
, str_replace('$', '', $_SESSION['ORDER_TOTAL'])
, 2
, $_SESSION["shipPref"] != 0 ? $_SESSION["shipPref"] : "NULL"
, addslashes($shipToStreet)
, addslashes($shipToStreet2)
, addslashes($shipToCity)
, addslashes($shipToZip)
, addslashes($row_rsCWGetCustShipping["country_Code"])
,addslashes($row_rsCWGetCustShipping["stprv_Code"])
, $transactionID
, addslashes($shipToName)
, intval($_REQUEST["shippingDiscount"])
, mySQLFloat($cart["CartTotals"]["ShippingDiscounts"])
, addslashes($_SESSION["order_Comments"]));
这是 select 语句(但还有更多具有不同 select 语句的报告):
$query_rsCWGetStatus = sprintf("SELECT o.order_Status, o.order_Date, c.cst_Email
FROM tbl_orders o
INNER JOIN tbl_customers c
ON c.cst_ID = o.order_CustomerID
WHERE order_ID = '%s'",$_POST["orderID"]);
最佳答案
来自 MySQL 引用:
CONVERT_TZ(dt,from_tz,to_tz)
converts a datetime valuedt
from the time zone given byfrom_tz
to the time zone given byto_tz
and returns the resulting value
就您的情况而言,您需要决定是否要在插入时或查询时进行转换。由于您已经有了数据,您应该更改您的选择:
SELECT o.order_Status, CONVERT_TZ(o.order_Date,'CST','EST'), ...
或
SELECT o.order_Status, CONVERT_TZ(o.order_Date,'-06:00','-05:00'), ...
关于mysql服务器在另一个时区,需要正确的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2275961/