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

标签 php mysql unix-timestamp yii2

我对 GridView 中的过滤字段如 created_atupdated_at 感到困惑。 Yii2 建议使用 unix 时间戳保存到 MySQL 数据库中的整数字段。一切都很好,但我如何过滤这些值?如果我只想过滤日期 - 我是否必须在搜索方法中添加如下内容?

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

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

我做错了吗?

最佳答案

你没有做错,但如果你想过滤时间戳,你至少有两个选择。

  1. 在查询中转换时间戳。
  2. 转换您要过滤的值。

您的评论是第一个选项(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]);

关于php - Yii2 - gridview 过滤器 unix 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26587939/

相关文章:

java - 在给定时区的 Android 上检索当前时间的错误

PHPUnit 和命名空间 - 仍在调用模拟方法

php - 使用 psr-4 命名空间失败

php - 用数据库值替换字符串中的字符

php - Codeigniter:Ion auth 重置密码

javascript - 使用 jquery/javascript 每分钟更新一次时间描述

php - mysql选择与id数组匹配的多行

javascript - jQuery validate.js 仅电子邮件未被验证

mysql - "sum"产品重量如果产品在不同行怎么办?

php - 对于以下场景,如何使用 SQL 查询显示按月结果?