codeigniter — Как можно сделать этот код PHP, используя метод DRY?

Я пытаюсь выяснить продажи на каждый день текущего месяца с 01 по 30 день. я использую функцию даты снова и снова. и используя одну и ту же переменную каждый раз. мой код большой и выглядит смехотворно плохо. Как я могу сделать этот код умнее, чтобы мне не пришлось писать весь этот код. все можно сделать, используя только одну петлю …. спасибо

    //first date
$todaySdate=date("Y-m-01 " );
$todayEdate=date("Y-m-01 23:59:59 ");
$this->db->select('*');
$this->db->from('ospos_sales AS A');
$this->db->join('ospos_sales_payments AS B', 'B.sale_id = A.sale_id', 'left');
$this->db->where('A.sale_time >=', $todaySdate);
$this->db->where('A.sale_time <=', $todayEdate);
$Todaysales = $this->db->get()->result_array();

$todaySale=0;
foreach($Todaysales as $d)
{
$todaySale+=$d['payment_amount'];
}

echo $todaySdate.'TK  :' .number_format( $todaySale,"2" )."</br>";

$startDate=date("Y-m-d" );
$endDate=date("Y-m-d");// second date
$todaySdate=date("Y-m-02 " );
$todayEdate=date("Y-m-02 23:59:59");
$this->db->select('*');
$this->db->from('ospos_sales AS A');
$this->db->join('ospos_sales_payments AS B', 'B.sale_id = A.sale_id', 'left');
$this->db->where('A.sale_time >=', $todaySdate);
$this->db->where('A.sale_time <=', $todayEdate);
$Todaysales = $this->db->get()->result_array();

$todaySale=0;
foreach($Todaysales as $d)
{
$todaySale+=$d['payment_amount'];
}

echo $todaySdate.'TK  :' .number_format( $todaySale,"2" )."</br>";

$startDate=date("Y-m-d" );
$endDate=date("Y-m-d");//third date
$todaySdate=date("Y-m-03 " );
$todayEdate=date("Y-m-03 23:59:59");
$this->db->select('*');
$this->db->from('ospos_sales AS A');
$this->db->join('ospos_sales_payments AS B', 'B.sale_id = A.sale_id', 'left');
$this->db->where('A.sale_time >=', $todaySdate);
$this->db->where('A.sale_time <=', $todayEdate);
$Todaysales = $this->db->get()->result_array();

$todaySale=0;
foreach($Todaysales as $d)
{
$todaySale+=$d['payment_amount'];
}

echo $todaySdate.'TK  :' .number_format( $todaySale,"2" )."</br>";

$startDate=date("Y-m-d" );
$endDate=date("Y-m-d");

// fourth date date
$todaySdate=date("Y-m-04 " );
$todayEdate=date("Y-m-04 23:59:59");
$this->db->select('*');
$this->db->from('ospos_sales AS A');
$this->db->join('ospos_sales_payments AS B', 'B.sale_id = A.sale_id', 'left');
$this->db->where('A.sale_time >=', $todaySdate);
$this->db->where('A.sale_time <=', $todayEdate);
$Todaysales = $this->db->get()->result_array();

$todaySale=0;
foreach($Todaysales as $d)
{
$todaySale+=$d['payment_amount'];
}

echo $todaySdate.'TK  :' .number_format( $todaySale,"2" )."</br>";

$startDate=date("Y-m-d" );
$endDate=date("Y-m-d");

// Fifth date
$todaySdate=date("Y-m-05 " );
$todayEdate=date("Y-m-05 23:59:59");
$this->db->select('*');
$this->db->from('ospos_sales AS A');
$this->db->join('ospos_sales_payments AS B', 'B.sale_id = A.sale_id', 'left');
$this->db->where('A.sale_time >=', $todaySdate);
$this->db->where('A.sale_time <=', $todayEdate);
$Todaysales = $this->db->get()->result_array();

$todaySale=0;
foreach($Todaysales as $d)
{
$todaySale+=$d['payment_amount'];
}

echo $todaySdate.'TK  :' .number_format( $todaySale,"2" )."</br>";

$startDate=date("Y-m-d" );
$endDate=date("Y-m-d");
........
.......
.......

Пример вывода моего кода ..

2017-09-01 TK :0.00
2017-09-02 TK :1,186.55
2017-09-03 TK :1,311.45
2017-09-04 TK :0.00
.........
........ .
2017-09-30 TK :0.00

0

Решение

Вот пример того, как вы можете изменить свой код.

<?php

function get_today_sales (\DateTime $date) {
$start_date = $date->setTime(0, 0);
$end_date = $start_date->add(new DateInterval('P1D'));

/*
$this->db->select('*');
$this->db->from('ospos_sales AS A');
$this->db->join('ospos_sales_payments AS B', 'B.sale_id = A.sale_id', 'left');
$this->db->where('A.sale_time >=', $todaySdate);
$this->db->where('A.sale_time <=', $todayEdate);
$Todaysales = $this->db->get()->result_array();

$todaySale = 0;
foreach($Todaysales as $d) {
$todaySale+=$d['payment_amount'];
}

return $today_sale;
*/
}

$start = new DateTime('2017-10-01');
$end = new DateTime('2017-10-20');

$interval = new DateInterval('P1D');
$period = new DatePeriod($start, $interval, $end);foreach ($period as $day) {
printf("%s -> %s\n", $day->format('Y-m-d'), get_today_sales($day));
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector