【问题标题】:covert number of days into weeks with respect to number of days in php关于php中的天数,将天数转换为周数
【发布时间】:2014-01-02 06:36:31
【问题描述】:

我有一个过滤器,它从我的数据库中获取日期过滤器库中的数据,它可以找到两个日期之间的数据。例如,从 = 2013-12-15 到 = 2013-12-20 等,然后返回我所需数据的日期。

现在我想如果用户选择大于 20 天的日期,例如从日期过滤器中选择的 25 天或超过 1 个月(可能导致长达 5 个月),那么它应该转换为 WEEKS 格式并返回数据以周为基础,并根据周数向我显示数据。

<?php $date_from = 2012-12-01; $to_date = 2013-12-31;  ?>

像上面一样,我有 1 个月或 4 周的时间。现在我想以周为基础显示数据,因为我在以上两个日期之间有超过 20 天的差异。

我在谷歌面积图中应用这个。现在我想以周为基础而不是单个日期显示数据。

我需要 php、mysql 中的解决方案。

我的代码

这是我的控制器函数,用于获取发布日期值

public function get_sales_graph(){

      if($this->input->post()){

        $type = $this->input->post('type');  
        $get_date = str_replace("/", "-", $this->input->post('chosen_from_date'));
        $get_date = DateTime::createFromFormat('m-d-Y', $get_date);
        $from_date = $get_date->format('Y-m-d');

        $get_to_date = str_replace("/", "-", $this->input->post('chosen_to_date'));
        $get_to_date = DateTime::createFromFormat('m-d-Y', $get_to_date);
        $to_date = $get_to_date->format('Y-m-d');

        $date1 = new DateTime($from_date);
        $date2 = new DateTime($to_date);
        $interval = $date1->diff($date2);
        $day_count = $interval->format('%a');
      }

        $user_id = $this->user->id;
        $rows['graph'] = $this->events_model->my_promo_graph_model($from_date, $to_date, $user_id);            
        $result = count($rows['graph']);
        $data['data'] = array();
        if($result > 0){

            array_push($data['data'], array('DATE', 'Sales'));
               foreach($rows['graph'] as $row){
                    array_push($data['data'], array($row['date_display'], (int)$row['ticketss_sold_on_date'])); 
               } 

        }
        else{
            $i = 1;
            $day_count = $day_count == 0 ? 1 : $day_count;
            array_push($data['data'], array('DATE', 'Sales'));
            while($i <= $day_count){
                array_push($data['data'], array(date('Y-m-'.$i), 0 ));
                $i++;
            }

        }


       echo json_encode($data);          
  }

这是我的模型

public function my_promo_graph_model($from_date, $to_date, $user_id){

        $this->db->select('DATE(tickets_sold.date) AS date_display,
                          SUM(tickets_sold.quantity) AS ticketss_sold_on_date,
                          SUM(tickets_sold.quantity*tickets_sold.price) AS money_earned');

        $this->db->join('tickets_sold', 'tickets_sold.event_date_id = my_promos.event_id');
        $this->db->where('my_promos.user_id', $user_id);
        $this->db->where('DATE(tickets_sold.date) >=', $from_date);
        $this->db->where('DATE(tickets_sold.date) <=', $to_date);
        $this->db->group_by('date_display');
        $query = $this->db->get('my_promos');
        return $query->result_array();
    }

【问题讨论】:

  • 请向我们展示您的代码
  • @WesC 我已经添加了我的代码。请看。
  • 你的 codeigniter 和 google-visualisation 标签与这个问题有什么关系?
  • 我提到这些是控制器和模型文件并且属于 CI,我还提到我正在应用它来绘制谷歌面积图 ghraph。 @工匠
  • @saad,我看到了,但你的问题与这两个标签无关。看到“google-visualisation”的人可能会尝试帮助或寻求帮助,然后发现这确实是 PHP/MySQL 语言问题。您的电话,我只是说这两个与“php”和“mysql”标签不相关,以保持网站标签的清洁。真的不是什么大问题。我只是说;)

标签: php mysql codeigniter


【解决方案1】:

在查询之前检查 PHP 中的日期范围,然后要求 MySQL 按周而不是按天分组,正如 cmets 中的链接所建议的那样。目前您要求:

$this->db->group_by('date_display');

试试:

$this->db->group_by('YEARWEEK(date_display, 3)');

您想要的 week mode 可能与此不同。使用 YEARWEEK 而不仅仅是 WEEK 意味着您可以安全地按它进行排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    相关资源
    最近更新 更多