【问题标题】:Yii2 Kartik DateRangePicker.Yii2 Kartik 日期范围选择器。
【发布时间】:2018-08-23 07:48:59
【问题描述】:

我正在使用带有 `presetDropdown' 选项的 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]);

我遇到的问题是当使用todayyesterday 选项时,它会产生以下查询:

SELECT * FROM `item` WHERE (`created_at` >= 1534896000) AND (`created_at` < 1534896000)

所以它正在查询在上午 12 点创建的项目。有没有人知道它可能是什么,很确定它不是默认行为,所以一定是我做错了。

【问题讨论】:

    标签: php yii2 kartik-v


    【解决方案1】:

    我的错……

    通过编辑格式选项来解决:

    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'],
        ]
    ]);
    

    产生一个看起来更丑陋的输入字段,但有一种方法可以隐藏它:

    【讨论】:

      【解决方案2】:

      或者,您可以使用类似这样的第一个版本来获得正确的结束时间戳:

      strtotime('+1 day', $this->end) - 1
      

      使用上面的命令,你得到第二天开始的时间戳(例如 14/11 00:00:00),然后从中减去一秒,得到你想要的时间戳(在同一个例子中13/11 23:59:59)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-08
        • 1970-01-01
        • 2021-12-25
        • 2015-12-15
        • 1970-01-01
        相关资源
        最近更新 更多