我有一个事件表。其中,due date
事件以datetime
格式存储。但是,由于需求的某些变化,现在我们只需要在date
列中显示due date
(不包括时间)。
活动(表格)
id | user_id | description | due_date | is_completed
1 8 My Event1 2016-08-09 19:16:00 0
2 8 My Event2 2016-08-09 19:53:00 0
我想在日期明智地展示所有活动。与2016-08-09
下的所有活动一样。
所以,我尝试了这个查询。
$upcoming_events = Events::find()->select(['due_date'])->distinct()
->where(['user_id' => Yii::$app->users->getId(),'is_completed'=> 0 ])
->andWhere(['>=','due_date',date("Y-m-d")])
->orderBy(['due_date'=>'ASC'])->limit(5)->all();
但是,现在有2个日期被选为2016-08-09 19:16:00
& 2016-08-09 19:53:00
。因为,日期部分不是从select语句中获取的。它显示相同日期的2倍。
的var_dump($ upcoming_events);
[1] => app\Events Object
(
[_attributes:yii\db\BaseActiveRecord:private] => Array
(
[due_date] => 2016-08-09 19:16:00
)
)
[2] => app\Events Object
(
[_attributes:yii\db\BaseActiveRecord:private] => Array
(
[due_date] => 2016-08-09 19:53:00
)
)
如何从日期时间字段中仅检索日期,以便在Yii2查询中仅获取1个日期。
任何帮助/提示/建议都很明显。
答案 0 :(得分:3)
您也可以只使用日期部分
upcoming_events = Events::find()->select('date(due_date) as due_date')->distinct()
->where(['user_id' => Yii::$app->users->getId(),'is_completed'=> 0 ])
->andWhere(['>=','due_date',date("Y-m-d")])
->orderBy(['due_date'=>'ASC'])->limit(5)->all();
答案 1 :(得分:0)
以下是使用Yii2模型查询从时间戳获取转换日期的查询。
$upcoming_events = Yii::$app->$db->createCommand('SELECT count(DISTINCT(date(due_date))) as edate FROM event_master')
->queryAll();
foreach ($upcoming_events as $upevnts){
echo $upevnts['edate'];
}
答案 2 :(得分:0)
我在有效查询中搜索了app\build.gradle
android-ngn-stack\build.gradle
。我没有得到。所以,我使用了 Command Builder 。
而且,它有效。
date(due_date)
但即使它有效。我想知道活动查询中的解决方案。
答案 3 :(得分:0)
您可以简单地使用此示例,
YourModelName::find()->where(['date(timestamp)' => php('Y-m-d')]->one();
这里的日期将从时间戳列中获取。