我需要能够每月或每天花费总金额。要做到这一点,我会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 . "%'";
}
答案 0 :(得分:2)
利用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
将其设置为单个值进行比较的原因。