我的机器有 (GMT +6:00 Astana,Dhaka)。我在我的 php 脚本上设置了我的时区
date_default_timezone_set('Asia/Dhaka');
但有时它在date()
函数中显示错误的日期。可能是我的 php 服务器没有设置 GMT 时间。
但是我的 mysql 服务器捕获了我的机器系统时区。所以我需要在 php 中相同。
这里我的数据库表概述
SHOP_BALANCE-------------shop_balance_id(PK,AI,INT),shop_balance(DOUBLE),dates(DATE)
PRODUCT_PURCHASE_ITEM----product_purchase_item_id(PK,AI,INT),product_id(INT),
pr_pur_cost_price(DOUBLE),pr_pur_unit_price(DOUBLE),
quantity(INT),product_size(INT),dates(TIMESTAMP),
bool_check(TINYINT)
PRODUCT_PURCHASES--------product_purchase_id(PK,AI,INT),insert_operation(INT),
product_purchase_item_id(FK ref of PRODUCT_PURCHASE_ITEM).
product_id(INT),dates(TIMESTAMP),product_size(INT)
想法是如果日期匹配,则在这一天的商店余额减少。如果日期是最后一个日期的新日期,则商店余额也会减少,但插入新日期
这是我的代码
在 shop_balance 表上查找最后一行 mysql 日期。我的日期栏是date
类型
$query=$this->db->query("select dates from shop_balance order by dates desc limit 1");
$rowfind_last_stock=$query->row();
if(isset($rowfind_last_stock->dates)){
$find_last_date=$rowfind_stock->dates;
}
在我的 php 服务器中查找今天的日期
$today=date("Y-m-d");
检查不同查询的日期
if($find_last_date==$today){
//run update query
$this->db->query(
"UPDATE
shop_balance AS s
INNER JOIN
(
SELECT p.dates,SUM(pr_pur_cost_price*quantity) AS net
FROM product_purchase_item AS i
LEFT JOIN product_purchases AS p
ON p.product_purchase_item_id=i.product_purchase_item_id
WHERE p.insert_operation='$id'
GROUP BY p.insert_operation
) AS a
ON s.dates=date(a.dates)
SET s.shop_balance=s.shop_balance-a.net
);"
}
else{
//run insert query
$this->db->query(
"INSERT INTO shop_balance
SELECT null,
(
(
SELECT shop_balance
FROM shop_balance
ORDER BY shop_balance_id
DESC LIMIT 1
)
-
(
SELECT p.dates,SUM(pr_pur_cost_price*quantity) AS net
FROM product_purchase_item AS i
LEFT JOIN product_purchases AS p
ON p.product_purchase_item_id=i.product_purchase_item_id
WHERE p.insert_operation='$id'
GROUP BY p.insert_operation
)
),
curdate();"
);
}
问题是有时当我安装不同时,它甚至在 php 和 mysql 日期中执行插入查询甚至相同的日期。我设置的两个时区都高于 GMT +6.00 。为什么会出现这个问题?