我正在构建一个简单的生日提醒应用程序,我在其中获取JSON中的姓名和生日,我需要显示根据下一个生日来分类的名称。
我的逻辑思路是让当前的日期和月份从生日中减去,然后进行某种排序。但接下来我将如何处理结果或情况,比如我们在12月等等。我猜测可能有一个更简单的解决方案,但我很无能为力。
这是一个带有基本工作代码的plunkr:http://plnkr.co/edit/AkP6FRRG917TDdTtfWM7?p=preview
答案 0 :(得分:0)
我会通过将日期转换为unix时间戳(int值)并对它们进行简单排序来解决这个问题。
使用javascript Date.parse()
将日期转换为时间戳答案 1 :(得分:0)
将当前日期和生日值转换为UNIX时间,并根据这两个值之间的差异进行比较
birthdates = [new Date(1988,01,27), new Date(2013,01,01)];
birthdates.sort(function(firstDate,secondDate){
//calculate the difference between first date and current date
firstDifference = new Date() - firstDate;
//calculate difference between second date and current date.
secondDifference = new Date() - secondDate;
//return the smallest value.
return firstDifference - secondDifference;
});
//display the sorted array.
alert(birthdates);
答案 2 :(得分:0)
正如其他人所建议的那样,将字符串转换为unix时间戳或日期。
这是一个updated Plunker。
控制器将fromNow变量添加到数据中:
$scope.friends.forEach(function(data){
var day = data.birthday.split("/")
var currentYear = new Date().getFullYear();
var birthdayDate = new Date(currentYear, day[0] - 1, day[1])
var now = new Date().valueOf();
if (birthdayDate.valueOf() < now){
birthdayDate.setFullYear(currentYear+1)
}
data.fromNow = birthdayDate.valueOf() - now;
})
day[0]
和日期day[1]
创建日期对象。 (注意我们从月份中减去1,因为Javascript中的月份是0)。 fromNow
你需要修改它,这样如果有人的生日是今天,它不会增加一年,因此将它放在列表的最后。
另请注意,我已在orderBy参数中添加了引号:
<tr ng-repeat="friend in friends| orderBy:'fromNow' ">