MySQL中的日期格式,用于通过AngularJS日期过滤器进行过滤

时间:2014-11-05 05:03:12

标签: javascript mysql angularjs sorting

我使用MySQL,AngularJS和ngTable来构建表格数据,并且我在排序方面遇到了问题。

数据库

`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

$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在ng-repeat =" doc in documents"

<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

使用这些格式中的任何一种,排序都不起作用,因为它根据字符串进行排序。无论如何将日期转换为Angular可以过滤的东西,但是根据日期值排序,只需要更改SQL语句?如果不是我需要做什么才能让排序工作?

1 个答案:

答案 0 :(得分: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日(纪元时间)以来的秒数,需要乘以1000才能到达过滤前的正确日期,所以我将其添加到Angular标记中,它现在可以正确过滤用户,并使用基础时间戳正确排序。

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