Php Yii-使用CJuiDatePicker返回的日期范围不正确
下午好 我的视图中有一个日期选择器,用于选择开始日期和结束日期。 我的问题是,我无法获得所选日期范围的正确数据。 我有一个下面的示例图像来告诉你我的意思 样本数据: 如果我选择开始日期(2015-10-01),然后选择结束日期(2015-10-29), 它只返回这个。 而不是这个 我只得到两个日期,即所选日期开始日期和所选日期结束日期。。问题是它应该返回候选1、2和3,因为它们的日期在开始日期(2015-10-01)到结束日期(2015-10-29)的日期范围内。我的代码有什么问题。请帮忙。有人能检查一下我的代码吗。。也许我错过了什么 这是我的看法Php Yii-使用CJuiDatePicker返回的日期范围不正确,php,yii,datepicker,Php,Yii,Datepicker,下午好 我的视图中有一个日期选择器,用于选择开始日期和结束日期。 我的问题是,我无法获得所选日期范围的正确数据。 我有一个下面的示例图像来告诉你我的意思 样本数据: 如果我选择开始日期(2015-10-01),然后选择结束日期(2015-10-29), 它只返回这个。 而不是这个 我只得到两个日期,即所选日期开始日期和所选日期结束日期。。问题是它应该返回候选1、2和3,因为它们的日期在开始日期(2015-10-01)到结束日期(2015-10-29)的日期范围内。我的代码有什么问题。请帮忙
<form>
<div class="form-group"><label>Date From</label>
<?php
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
'model' => $model,
'name' => 'start_date',
'options'=>array(
'dateFormat'=>'yy-mm-dd',
),
'htmlOptions'=>array(
'class'=>'form-control',
'placeholder'=>'From',
'value' => $search_date_start,
),
));
?>
</div>
<div class="form-group"><label>To</label>
<div class="controls" style='margin-top: 5px;'>
<?php
$end_date = date('m-d-Y');
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
'model' => $model,
'name' => 'end_date',
'options'=>array(
'dateFormat'=>'yy-mm-dd',
),
'htmlOptions'=>array(
'class'=>'form-control',
'placeholder'=>'To',
'value' => $search_date_end,
),
));
?>
</div>
</div>
</div>
<div class="form-group">
<input type="submit" name='search_btn' value="Search" class='btn btn-primary '>
<input type="submit" name='reset_btn' value="Reset" class='btn btn-default '>
</div>
</form>
在我的模型中,我有这个代码
if(isset($_POST['search_btn'])) {
if (isset($_POST['start_date']) && isset($_POST['end_date'])) {
$search_date_start = $_POST['start_date'];
$search_date_end = $_POST['end_date'];
Yii::app()->session['start_date_evaluation'] = $search_date_start;
Yii::app()->session['end_date_evaluation'] = $search_date_end;
}
if (isset($_POST['search'])) {
$search = $_POST['search'];
Yii::app()->session['search_evaluation'] = $search;
}
}
public function search($candidate_id, $search_date_start, $search_date_end, $search) {
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria = new CDbCriteria;
$criteria->compare('id', $this->id);
$criteria->compare('evaluation_form_id', $this->evaluation_form_id);
$criteria->addSearchCondition('evaluatee', $search);
$criteria->addSearchCondition('start_date', $search_date_start);
$criteria->addSearchCondition('end_date', $search_date_end);
if ($candidate_id !== '') {
$criteria->compare('employee_id', $candidate_id);
} else {
$criteria->compare('employee_id', $this->employee_id);
$criteria->compare('evaluation_code', $this->evaluation_code);
$criteria->compare('start_date', $this->start_date, true);
$criteria->compare('end_date', $this->end_date, true);
$criteria->compare('evaluatee', $this->evaluatee, true);
$criteria->compare('date_created', $this->date_created, true);
$criteria->compare('created_by', $this->created_by, true);
}
if ($search_date_end !== '' && $search_date_start !== ''){
$criteria->compare('start_date', $search_date_start, false, '>=');
$criteria->compare('end_date', $search_date_end, false, '<=');
}
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}
公共函数搜索($candidate\u id,$search\u date\u start,$search\u date\u end,$search){
//警告:请修改以下代码以删除
//不应该被搜查。
$criteria=新的CDB标准;
$criteria->compare('id',$this->id);
$criteria->compare('evaluation\u form\u id',$this->evaluation\u form\u id);
$criteria->addSearchCondition('evaluatee',$search);
$criteria->addSearchCondition($start\u date',$search\u date\u start);
$criteria->addSearchCondition($end\u date',$search\u date\u end);
如果($candidate_id!=''){
$criteria->compare('employee\u id',$candidate\u id);
}否则{
$criteria->compare('employee\u id',$this->employee\u id);
$criteria->compare('evaluation\u code',$this->evaluation\u code);
$criteria->compare('start\u date',$this->start\u date,true);
$criteria->compare('end\u date',$this->end\u date,true);
$criteria->compare('evaluatee',$this->evaluatee,true);
$criteria->compare('date\u created',$this->date\u created,true);
$criteria->compare('created_by',$this->created_by,true);
}
如果($search\u date\u end!=''&&$search\u date\u start!=''){
$criteria->compare('start_date',$search_date_start,false,'>=');
$criteria->compare('end_date',$search_date_end,false),您可以在模型的搜索方法中添加带有start_date的3条件:
$criteria->addSearchCondition('start_date', $search_date_start);
$criteria->compare('start_date', $this->start_date, true);
$criteria->compare('start_date', $search_date_start, false, '>=');
想象一下,WHERE之后的sql如下所示:
WHERE
start_date='2015-10-01'
AND start_date LIKE '%2015-10-01%'
AND start_date>='2015-10-01'
最后两个条件将变得无用。因此您只需要留下一个条件
另外,在main.php中激活跟踪日志,查看SQL查询以进行调试:
'routes' => array(
array(
'class' => 'CFileLogRoute',
'logFile' => 'application_trace.log',
'levels' => 'trace',
'rotateByCopy' => true,
'enabled' => true,
)
)
试试这个:
if ($search_date_end !== '' && $search_date_start !== ''){
$criteria->addBetweenCondition('DATE_FORMAT(start_date,"%Y-%m-%d")',
date("Y-m-d", strtotime($search_date_start)),
date("Y-m-d", strtotime($search_date_end)), 'AND');
$criteria->addBetweenCondition('DATE_FORMAT(end_date,"%Y-%m-%d")',
date("Y-m-d", strtotime($search_date_start)),
date("Y-m-d", strtotime($search_date_end)), 'AND');
}
我知道,我知道我的状况有点不对劲
if ($search_date_end !== '' && $search_date_start !== ''){
$criteria->compare('start_date', $search_date_start, false, '>=');
$criteria->compare('end_date', $search_date_end, false, '<=');
}
if($search\u date\u end!=''&$search\u date\u start!=''){
$criteria->compare('start_date',$search_date_start,false,'>=');
$criteria->compare('end_date',$search_date_end,false,'这是非常不清楚的。与其涂黑候选人姓名,不如替换假姓名,并在你想要的内容和实际显示的内容上保持一致。对此感到抱歉。我编辑了我的帖子并更改了示例图像。我尝试了此操作,但不起作用。它没有返回3,而是没有返回任何内容。我尝试了使用$criteria->addBetweenCondition('start\u date',$this->search\u start\u date,$this->search\u end\u date)),但仍然返回错误。虽然我不熟悉yii,但我不知道如何激活跟踪日志。你能帮我看一下吗。。
if ($search_date_end == '' && $search_date_start !== '') {
$criteria->condition = "start_date >= '$search_date_start'";
} elseif ($search_date_end !== '' && $search_date_start == '') {
$criteria->condition = "end_date <= '$search_date_end'";
} elseif ($search_date_end !== '' && $search_date_start !== '') {
$criteria->condition = "start_date >= '$search_date_start' AND end_date <= '$search_date_end'";
}