【问题标题】:CodeIgniter Model Date RangeCodeIgniter 型号日期范围
【发布时间】:2022-01-18 11:57:33
【问题描述】:

我已经苦苦挣扎了几个星期。最近我在这里发了一个问题CodeIgniter Datatables Server Side Date Range using Datepicker,但没有运气。

然后我决定通过测试 Codeigniter 模型来隔离问题,似乎那里存在问题。

下面是代码和图片。

Codeigniter 模型

function get_allbillinglistByDate($startdate,$enddate){
    $data = array();
    $sdate = "09/01/2020";
    $edate = "11/01/2020";
    $this->db->from('invoices');
    $multipleWhere = ['invoices.Approved' => 1,'invoices.xero' => 0];
    $this->db->where($multipleWhere);
    //$this->db->where('Invoice_Date BETWEEN "'. date('m-d-Y', strtotime($sdate)). '" and "'. date('m-d-Y', strtotime($edate)).'"');
    $this->db->where('Invoice_Date >=', date('m-d-Y', strtotime($sdate)));
    $this->db->where('Invoice_Date <=', date('m-d-Y', strtotime($edate)));
    $Q = $this->db->get();
    
    if ($Q->num_rows() > 0){
        foreach ($Q->result_array() as $row){
            $data[] = $row;
        }
    }
    $Q->free_result();
    return $data;
}

这是截图 Date Column where only 2020 record should show but it shows 2021 too

不知道哪里出了问题,日期列应该只显示 2020 年的记录,但它也显示 2021 年

请指教。

【问题讨论】:

  • 它的数据库日期将存储为Y-m-d格式,你必须使用date('Y-m-d', strtotime($sdate))

标签: php mysql codeigniter datatable datatables


【解决方案1】:

尽管 MySQL 尝试以多种格式解释值,但日期部分必须始终按年-月-日顺序(例如,'98-09-04')给出,而不是按月-日-年或日- 其他地方常用的月-年顺序(例如,'09-04-98'、'04-09-98')。要将其他顺序中的字符串转换为年月日顺序,STR_TO_DATE() 函数可能会很有用。

参考:https://dev.mysql.com/doc/refman/8.0/en/date-and-time-types.html

所以,修改你的代码如下

date('Y-m-d', strtotime($sdate)

【讨论】:

  • 谢谢,伙计们。根据您的建议,我进行了更改,但现在我无法加载整个数据库。我在数据库中的日期列采用以下格式 d/m/Y 例如。 09/01/2020 请指教谢谢。
【解决方案2】:

Raj 的答案是正确的。您可以根据您的预期格式对其进行调整,如下所示

date('d/m/Y', strtotime($sdate));
date('d/m/Y', strtotime($edate));

您方法的另一种语法,但您可能需要稍微调整一下。您应该格式化日期参数,然后将它们发送到此方法,您可以按照我们的描述格式化它们

function get_allbillinglistByDate($startdate,$enddate){
  $sql = "SELECT * FROM invoices where Approved = 1 AND xero = 0 AND DATE(Invoice_Date) BETWEEN ? AND ?"; 

  $data = array();
  array_push($data, $startdate);
  array_push($data, $enddate);

  $query = $this->db->query($sql, $dataArr);
  return (array)$query->result_array();
}

更多信息请查看https://www.php.net/manual/en/function.date.php

【讨论】:

  • 嗨 Ahmet,感谢您的协助,但您的代码不起作用。 Mysql 中的日期列保存在 Varchar 中,不确定这是否有问题。
  • 开始日期和结束日期来自同一列
【解决方案3】:

好的,问题解决了。我必须将 PHPMyAdmin 中 MYSQL 表中的列类型从 varchar 更改为 date 才能获取日期范围。

【讨论】:

    猜你喜欢
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    相关资源
    最近更新 更多