php - MySQL:如何按时间戳搜索但首先转换时区?

标签 php mysql

我需要能够获得每月或每天花费的总金额。为此,我执行 sum(tblaccounts.amountin) 但我遇到的问题是我需要将我的 date 列转换为不同的时区拳头。我尝试过使用 convert_tz(date,"+00:00","+10:00") 但不确定如何将其与 LIKE 一起使用。

在第一次转换时间戳时,如何根据 $period 变量获取每月或每天的记录?

类似于 WHERE Con​​vert_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/

相关文章:

mysql - 有没有更快的方法来备份和恢复 mysql?

php - 数据库驱动的选择框在提交时为空

php - Composer 未复制到指定的 bin-dir 目录

php - CodeIgniter 将数据插入数据库

Mysql Select reciprocal pairs of records,不重复

mysql - 如何创建在两个以上 mirth-connect 服务器之间共享的单个 MySQL 数据库服务器?

phpmyadmin 显示 utf 8 但站点没有

php - mysql插入错误json解码

php - 保持用户特定 session 信息安全的最佳方式

php - 如何在MySQL中选择每个回答者给出的答案的最新版本?