gpt4 book ai didi

php - 我怎样才能在我的 php 服务器上获得我的系统时区

转载 作者:行者123 更新时间:2023-11-30 23:49:32 25 4
gpt4 key购买 nike

我的机器有 (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)

IDEA IS IF DATE MATCH, SHOP BALANCE DECREASING ON THIS DAY. IF DATE IS NEW DATE TO SHOP BALANCE LAST DATE, SHOP BALANCE ALSO DECREASING BUT INSERT NEW DATE

这是我的代码

在 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 以上。为什么会出现这个问题?

最佳答案

请引用文档MySQL Server Time Zone Supporttime_zonesystem_time_Zone变量。

相信您会发现您的系统时区设置不是您所期望的。当您的插入查询调用 curdate() 时,MySQL 在 session 的 time_zone 变量的时区中传递它。默认情况下,这与 system_time_zone 变量中设置的时区相同。

您可以像这样检查您的时区变量:

SHOW VARIABLES LIKE '%time_zone'

如果您不想更改 MySQL 服务器的系统时区,则可以通过在查询之前插入以下内容来设置 session 时区:

SET time_zone = 'Asia/Dhaka';

如果出现错误,则说明时区表尚未加载。您可以使用 mysql_tzinfo_to_sql填充它们。另见 this answer .

当然,更简单的解决方案是不使用 curdate(),而是从 PHP 收集当前日期并将其作为参数传递给查询。

关于php - 我怎样才能在我的 php 服务器上获得我的系统时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18887915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com