编程语言
首页 > 编程语言> > php-Yii2-gridview过滤器unix时间戳

php-Yii2-gridview过滤器unix时间戳

作者:互联网

我对在GridView中过滤诸如created_at或updated_at之类的字段感到困惑. Yii2建议使用保存在MySQL数据库的integer字段中的unix时间戳.一切都很好,但是如何过滤这些值?如果我只想过滤日期,是否需要在搜索方法中添加以下内容?

$query->andFilterWhere([
'DATE(FROM_UNIXTIME('.$this->tableName() . '.created_at))' => $this->created_at]);

还是使用特定格式的FROM_UNIXTIME?当然可以这样做,但是比较字段意味着将所有值转换为日期,然后进行比较.

我做错了吗?

解决方法:

您的操作没有错,但是如果要根据时间戳进行过滤,则至少有两个选择.

>在查询中转换时间戳.
>转换要过滤的值.

您的评论是,可以通过将所有值转换为日期并进行比较来完成,这是第一个选项(MySql将每个时间戳转换为日期). (但是您也不必将$this-> created_at转换为日期吗?).

使用第二个选项,您可以将$this-> created_at值转换为最低和最高的unix时间戳值,并使用SELECT BETWEEN过滤子句.在那种情况下,您只需要两次由Php完成的转换(转换为最低和最高日期值),而MySql仅执行范围检查.

// date to search        
$date = DateTime::createFromFormat('m/d/Y', '10/27/2014');
$date->setTime(0,0,0);

// set lowest date value
$unixDateStart = $date->getTimeStamp();

// add 1 day and subtract 1 second
$date->add(new DateInterval('P1D'));
$date->sub(new DateInterval('PT1S'));

// set highest date value
$unixDateEnd = $date->getTimeStamp();

$query->andFilterWhere(
    ['between', 'created_at', $unixDateStart, $unixDateEnd]);

标签:yii2,unix-timestamp,mysql,php
来源: https://codeday.me/bug/20191029/1956774.html