2014-11-05 142 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>