我正在使用带有“预设下拉”选项的Kartiks DateRangePicker。这将提供一些默认值,以便搜索、今天、昨天、最后7天等。
产生选择器的代码:
echo DateRangePicker::widget([
'model'=>$model,
'attribute' => 'created_at',
'useWithAddon'=>true,
'convertFormat'=>true,
'presetDropdown'=>true,
'hideInput'=>true,
'startAttribute' => 'start',
'endAttribute' => 'end',
'pluginOptions'=>[
'locale'=>['format' => 'Y-m-d'],
]
]);
SearchItem类:
$this->start = strtotime($this->start);
$this->end = strtotime($this->end);
$query->andFilterWhere(['>=', 'created_at', $this->start])
->andFilterWhere(['<', 'created_at', $this->end]);
我遇到的问题是,当使用今天
或昨天
选项时,它会生成以下查询:
SELECT * FROM `item` WHERE (`created_at` >= 1534896000) AND (`created_at` < 1534896000)
所以它在查询凌晨12点突然创建的物品。有人知道这可能是什么吗,非常确定这不是默认行为,所以一定是我做错了什么。
或者,您可以在第一个版本中使用类似的内容来获得正确的结束时间戳:
strtotime('+1 day', $this->end) - 1
使用上面的命令,您可以获得第二天开始的时间戳(例如14/11 00:00:00),然后从中减去1秒,以获得所需的时间戳(在同一示例13/11 23:59:59中)。
我的坏...
通过将“格式”选项编辑为:
echo DateRangePicker::widget([
'model'=>$model,
'attribute' => 'created_at',
'useWithAddon'=>true,
'convertFormat'=>true,
'presetDropdown'=>true,
'hideInput'=>true,
'startAttribute' => 'start',
'endAttribute' => 'end',
'pluginOptions'=>[
'locale'=>['format' => 'Y-m-d H:i:s'],
]
]);
生成一个看起来更丑的输入字段,但有一种方法可以隐藏它: