2014-11-05 143 views
0

我正在使用MySQL,AngularJS和ngTable构建我的表格数据,并且我遇到了排序问题。在MySQL中用于过滤AngularJS日期过滤器的日期格式

数据库

`id` int(11) NOT NULL AUTO_INCREMENT, 
`packageid` int(11) NOT NULL, 
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, // 2014-10-30 15:31:56 
`status` int(11) NOT NULL DEFAULT '1', 

SQL NG-重复内

$query = $this->db->query( 
    "SELECT packageinstance.id, 
      packageinstance.created // 2014-10-30 15:31:56 
      DATE_FORMAT(packageinstance.created, '%b %e, %Y') as date, // Jan 1, 2014 
      user.username, 
      status.name as status 
    FROM packageinstance 
    JOIN user ON user.id = packageinstance.creatorid 
    JOIN status ON status.id = packageinstance.status 
    WHERE packageinstance.locationid = ? 
    ORDER BY packageinstance.created DESC", array($locationId)); 

AngularJS

<td data-title="'Date'" 
    sortable="'created'" 
    ng-bind="(doc.created|date:mediumDate)"></td> // attempt one 

<td data-title="'Date'" 
    sortable="'date'" 
    ng-bind="(doc.date|date:mediumDate)"></td> // attempt two 

使用任一这些格式的排序不工作为= “在DOC文档”它根据一个字符串排序。有没有办法将日期转换为Angular可以过滤的东西,但是根据日期值进行排序,只需要在SQL语句中进行更改?如果不是,我需要做些什么才能使这种排序工作?

回答

0

通过阅读MySQL文档我发现了另一个日期函数UNIX_TIMESTAMP,我用它来替换查询中的DATE_FORMAT。

$query = $this->db->query( 
    "SELECT packageinstance.id, 
      UNIX_TIMESTAMP(packageinstance.created) as epoch_time, // replaced DATE_FORMAT 
      user.username, 
      status.name as status 
    FROM packageinstance 
    JOIN user ON user.id = packageinstance.creatorid 
    JOIN status ON status.id = packageinstance.status 
    WHERE packageinstance.locationid = ? 
    ORDER BY packageinstance.created DESC", array($locationId)); 

这使得Angular的日期筛选器可以完成它的工作,但是在1970年1月17日的所有日期显示。多一点工作,我记得时间戳是1970年1月17日以来的秒数(epoch时间),它需要乘以1000才能在过滤之前到达适当的日期,所以我将其添加到Angular标记中,现在它可以为用户正确过滤,并使用基础时间戳正确排序。

<td data-title="'Date'" 
    sortable="'epoch_time'" 
    ng-bind="(doc.epoch_time*1000|date:mediumDate)"></td>