我需要能够获得每月或每天花费的总金额。为此,我执行 sum(tblaccounts.amountin)
但我遇到的问题是我需要将我的 date
列转换为不同的时区拳头。我尝试过使用 convert_tz(date,"+00:00","+10:00")
但不确定如何将其与 LIKE
一起使用。
在第一次转换时间戳时,如何根据 $period
变量获取每月或每天的记录?
类似于 WHERE Convert_tz(date) LIKE $date_to_check%
function check_limit($period='monthlylimit') {
if ($period == 'monthlylimit') {
$date_to_check = date("Y-m");
}
else { ### Day period
$date_to_check = date("Y-m-d");
}
$select = "SELECT
sum(tblaccounts.amountin) as amountin
FROM tblaccounts
WHERE date LIKE '" . $date_to_check . "%'";
}
最佳答案
利用 mysql 内部的时区更改,应该可以解决问题:
if ($period == 'monthlylimit') {
$date = date('Ym');
$format = '%Y%m';
} else {
$date = date('Ymd');
$format = '%Y%m%d';
}
$sql = "SELECT SUM(t.amountin) as amountin FROM tblaccounts t WHERE
DATE_FORMAT(CONVERT_TZ(t.date,'+00:00','+10:00'),'". $format ."') = '". $date ."'";
正确的时区数字也取决于您的 mysql 默认值以及您想要的结果。您可能需要摆弄这个数字。
或者你可以更改 php 端日期的时区并跳过 mysql tz 转换:
$dt = new DateTime("now", new DateTimeZone($tz));// $tz to equal what you are aiming for
$dt->setTimestamp(time());// might not be needed
if ($period == 'monthlylimit') {
$date = $dt->format('Ym');
$format = '%Y%m';
} else {
$date = $dt->format('Ymd');
$format = '%Y%m%d';
}
$sql = "SELECT SUM(t.amountin) as amountin FROM tblaccounts t WHERE
DATE_FORMAT(t.date,'". $format ."') = '". $date ."'";
注意:这里我没有使用LIKE
,因为这就是我引入DATE_FORMAT
将其设置为单个值进行比较的原因.
关于php - MySQL:如何按时间戳搜索但首先转换时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48673258/