Php 只需要从日期开始提取年份和月份

Php 只需要从日期开始提取年份和月份,php,mysql,codeigniter,date,Php,Mysql,Codeigniter,Date,这里,我在表中插入的值如下所示 `2017-01-01`, `2017-01-02`, `2017-01-03`, `2017-01-04`, `2017-01-05`, `2017-01-06`. 我只需要从那以后的一年一个月, 为此,我使用了如下代码 public function present_report_by_empid($user_id = null,$date = null) { $query='tbl_attendance.date_in'; $thi

这里,我在表中插入的值如下所示

`2017-01-01`,
`2017-01-02`,
`2017-01-03`,
`2017-01-04`,
`2017-01-05`,
`2017-01-06`. 
我只需要从那以后的一年一个月, 为此,我使用了如下代码

public function present_report_by_empid($user_id = null,$date = null) 
 {

    $query='tbl_attendance.date_in';
    $this->db->where('tbl_attendance.attendance_status', 1);
    $this->db->where('tbl_attendance.user_id', $user_id);
    $this->db->where(date('Y-m',strtotime($query)), $date);

    return $this->db->count_all_results('tbl_attendance');
}
我的$date值是
2017-01
,当我这样给出时,我得到了这样的错误
选择计数(*)作为
numrows
来自
tbl\u考勤
其中
tbl\u考勤
考勤状态
=1和
tbl\u考勤
用户id
='1'和
1970-01
='2017-01'
首先需要将日期解析为Y-m格式,然后可以使用此列作为条件

public function present_report_by_empid($user_id = null,$date = null) 
 {

    $query='tbl_attendance.date_in';
    $this->db->select('tbl_attendance.*,DATE_FORMAT(tbl_attendance.date_in,"%Y-%m") as date_parse');
    $this->db->where('tbl_attendance.attendance_status', 1);
    $this->db->where('tbl_attendance.user_id', $user_id);
    $this->db->where('date_parse',date('Y-m',strtotime($date)));

    return $this->db->count_all_results('tbl_attendance');
}

首先需要将日期解析为Y-m格式,然后可以使用此列作为条件

public function present_report_by_empid($user_id = null,$date = null) 
 {

    $query='tbl_attendance.date_in';
    $this->db->select('tbl_attendance.*,DATE_FORMAT(tbl_attendance.date_in,"%Y-%m") as date_parse');
    $this->db->where('tbl_attendance.attendance_status', 1);
    $this->db->where('tbl_attendance.user_id', $user_id);
    $this->db->where('date_parse',date('Y-m',strtotime($date)));

    return $this->db->count_all_results('tbl_attendance');
}

我相信你的话有错误

$this->db->where(date('Y-m',strtotime($query)), $date);
用值检查值

现在用这个替换你的函数

public function present_report_by_empid($user_id = null,$date = null) 
 {
    $temp = explode("-",$date);
    $query='tbl_attendance.date_in';
    $this->db->where('tbl_attendance.attendance_status', 1);
    $this->db->where('tbl_attendance.user_id', $user_id);
    $this->db->where("YEAR(tbl_attendance.date_in)",$temp[0]);
    $this->db->where("MONTH(tbl_attendance.date_in)",$temp[1]);
    return $this->db->count_all_results('tbl_attendance');
}

试试看,它会起作用的。

我相信你的思路有误

$this->db->where(date('Y-m',strtotime($query)), $date);
用值检查值

现在用这个替换你的函数

public function present_report_by_empid($user_id = null,$date = null) 
 {
    $temp = explode("-",$date);
    $query='tbl_attendance.date_in';
    $this->db->where('tbl_attendance.attendance_status', 1);
    $this->db->where('tbl_attendance.user_id', $user_id);
    $this->db->where("YEAR(tbl_attendance.date_in)",$temp[0]);
    $this->db->where("MONTH(tbl_attendance.date_in)",$temp[1]);
    return $this->db->count_all_results('tbl_attendance');
}


试试看,它会成功的。

请发布您正在获取的错误。表中的日期列名是什么?请看我已经发布了。..date\u in?你说的是?是啊…当然了,
请在表中公布你得到的错误日期列名是什么?看我已经公布了..日期?你说的是?耶…当然了中的date\u,如果运行此代码时出现任何错误,请告诉我。我将修复它,在not date\u parse中,列名是date\u,它仍然无法工作,因为日期格式是表字段的Y-m-d是的,我知道日期列tbl\u attention.date\u在我所做的工作中,我将DB date Y-m-d格式化为Y-m,并存储在虚拟列date\u parse中,然后在该列上设置条件尝试使用
$this->DB->last\u query()调试从代码中获得的查询
并将其发布到此处,伙计,如果在运行此代码时出现任何错误,请告知我。我将在not date_parse中修复它的列名为date_,它仍然无法工作,因为日期格式是表字段的Y-m-d是的,我知道日期列tbl\u attention.date\u在我所做的工作中,我将DB date Y-m-d格式化为Y-m,并存储在虚拟列date\u parse中,然后在该列上设置条件尝试使用
$this->DB->last\u query()调试从代码中获得的查询
然后贴在这里,伙计,我不是OP:D