未能获得午夜之后两个日期之间的每日销售额- codeigniter 4



检索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):

  1. DateTime类
  2. 日期增加一天

当我使用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);
}