【问题标题】:DataTables.net select inputs filter ignore time in datetimeDataTables.net 选择输入过滤器忽略日期时间中的时间
【发布时间】:2014-08-27 23:50:00
【问题描述】:

我正在使用 DataTables.net 在我的 laravel 项目中呈现数据。现在我遇到了问题。 在几列中,我在 dd.mm.yyyy H:i 中有数据。我也在使用DataTables.net select inputs filter

我的列排序正常(单击表格标题)。问题是选择输入充满了ex:

31.12.2014 08:12 

现在我想要的是过滤器将这些列排序为日期(不是日期时间)。因为如果我的表有 100 行,这意味着在具有日期时间值的字段下有 100 个选择选项。我希望它们按日期分组而忽略时间。

有什么解决办法吗?

【问题讨论】:

  • 这些日期是从数据库中提取的吗?
  • 是的,它们的格式为 2014-06-26 09:37:14。然后我使用 laravel 将它们转换为我的语言环境。

标签: jquery laravel datatable


【解决方案1】:

您可以尝试一些解决方案。

我不知道您是如何设置查询的,但您可以在那里添加一个选择,并在您的查询中考虑差异并仅返回其中的日期部分。

...->select(DB::raw('DISTINCT DATE(DATE_ADD(your_date_column, INTERVAL x HOUR)) AS your_date_column'))

其中your_date_column 是您要查找的日期列的名称,x 是要更改的小时数,如果您落后,它可能是一个负值。这将返回出现在您的数据库中的唯一日期集合,这些日期被小时数抵消。

另一种解决方案是遍历您的结果集并将它们设置为您去的日期。 Carbon 会让这件事变得相当容易。

foreach($results as $result) {
    $date = \Carbon::createFromTimeStamp($result->your_date_column);
    $date->addHours($hoursToAdd);
    $result->your_date_column = $date->toDateString();
}

【讨论】:

    【解决方案2】:

    这种类型的选择允许您只选择字段的固定部分,而不是按您选择的部分进行分组。因此,如果您只需要日期字段中的前 10 个字符,您可以像这样选择它。

    SELECT SUBSTRING('date',1,10) AS trimmed_date 
    FROM table
    GROUP BY trimmed_date;
    

    这会将信息作为 trimmed_date 返回。如果你仍然希望它是约会,你可以这样做。

    SELECT SUBSTRING('date',1,10)
    FROM table
    GROUP BY SUBSTRING('date',1,10);
    

    【讨论】:

    • 您能否进一步扩展您的答案?
    • 这行不通,因为 datatables.net jquery 插件不能那样工作。我从我的数据库中选择所有内容,然后所有这些数据都显示在一个 html 表中,然后 Jquery 负责过滤该 html 表。这是工作示例link 我知道如何在 SQL 中分组,但我不需要。
    【解决方案3】:

    从数据库中提取日期/时间数据作为 unix 时间戳,应该类似于 13249141986。创建数据表时,请为该列使用渲染器。这是一个提示:

    var table = $('#example').DataTable( {
        "data": dataSet, // in my case I'm building using data from a variable
        "columns": [
            { "title": "Name" },
            { "title": "Modified",
              "render": function (data, type, full, meta) {
                  return type === 'display' ? jQuery.datepicker.formatDate('M dd, yy', new Date(1000 * data)) : data;
                }
             }
        ]
    } );  
    

    当调用渲染器进行显示时,我会将其解析为可读的内容,否则我只是返回原始秒数。这应该可以帮助您入门。

    【讨论】:

      猜你喜欢
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      • 2016-09-18
      • 1970-01-01
      • 2017-12-07
      • 2018-12-02
      相关资源
      最近更新 更多