检索DAILY SALES失败在我的codeigniter 4 pos系统在午夜之后查询两个日期之间的时间
POS系统在BAR/Club工作,他们的开始时间是14:00,结束时间是03:00(第二天)。
我当前的代码只显示每日销售到午夜。午夜后,我的营业时间变成了新的一天,因为那时没有销售。
这是我尝试过的
//Get Daily Sales For Tenant ID - By Specific Opening/Closing time
public function getdailySalesByTenant($t, $ot, $ct)
{
$builder = $this->db->table('orders as o');
$builder->select('o.*, u.first_name as waiter');
$builder->join('users as u', 'u.id = o.sold_by', 'left' );
$builder->where('o.tenant_id', $t);
$builder->where('o.created_at >=', $ot);
$builder->where('o.created_at <=', $ct);
return $results = $builder->get()->getResult();
}
控制器//Daily Sales
public function getdailySales()
{
$t = $this->settingsModel->where('user_id', $this->tenantId->tenant_id)->first();
$ot = date('Y-m-d H:i:s', strtotime($t['opening_time']));
$ct = date('Y-m-d H:i:s', strtotime($t['closing_time'].'+ 1 day'));
$data = $this->transactionsModel->getdailySalesByTenant($this->tenantId->tenant_id, $ot, $ct);
$response = [
'success' => true,
'data' => $data,
];
return $this->response->setJSON($response);
}
我要记录从2023-01-05 14:00:00到2023-01-06 03:00:00的每日销售额
代替:❌
// ...
$ot = date('Y-m-d H:i:s', strtotime($t['opening_time']));
$ct = date('Y-m-d H:i:s', strtotime($t['closing_time'].'+ 1 day'));
// ...
使用这个:✅
$ot = (new DateTime($t['opening_time']))->format("Y-m-d H:i:s");
$ct = (function () use ($t) {
$openingTime = strtotime($t['opening_time']);
$closingTime = strtotime($t['closing_time']);
return ($closingTime >= $openingTime)
? (new DateTime($t['closing_time']))->format("Y-m-d H:i:s")
: (new DateTime($t['closing_time']))->modify("+1 DAY")->format("Y-m-d H:i:s");
})();
参考(s):
- DateTime类
- 日期增加一天
当我使用if——else时。它工作。下面是控制器。
//Daily Sales
public function getdailySales()
{
$t = $this->settingsModel->where('user_id', $this->tenantId->tenant_id)->first();
$opening_hour = $t['opening_time'];
$hour=date('H'); //24hr clock.
if($hour < $opening_hour) {
$ot = date('Y-m-d H:i:s', strtotime($t['opening_time'].'- 1 day'));
$ct = date('Y-m-d H:i:s', strtotime($t['closing_time'].'+ 1 day'));
} else {
$ot = date('Y-m-d H:i:s', strtotime($t['opening_time']));
$ct = date('Y-m-d H:i:s', strtotime($t['closing_time'].'+ 1 day'));
}
$data = $this->transactionsModel->getdailySalesByTenant($this->tenantId->tenant_id, $ot, $ct);
$response = [
'success' => true,
'data' => $data,
];
return $this->response->setJSON($response);
}