根据即将到来的生日排序

时间:2013-12-05 19:39:23

标签: javascript angularjs

我正在构建一个简单的生日提醒应用程序,我在其中获取JSON中的姓名和生日,我需要显示根据下一个生日来分类的名称。

我的逻辑思路是让当前的日期和月份从生日中减去,然后进行某种排序。但接下来我将如何处理结果或情况,比如我们在12月等等。我猜测可能有一个更简单的解决方案,但我很无能为力。

这是一个带有基本工作代码的plunkr:http://plnkr.co/edit/AkP6FRRG917TDdTtfWM7?p=preview

3 个答案:

答案 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;
})
  1. 获取个别日期/月份部分(因此我们得到像[“02”,“14”,“1985”]这样的列表)
  2. 根据当前年份,月份day[0]和日期day[1]创建日期对象。 (注意我们从月份中减去1,因为Javascript中的月份是0)。
  3. 获取当前日期/时间的数值
  4. 如果生日过去加一年
  5. 将现在和生日之间的毫秒数分配给fromNow
  6. 你需要修改它,这样如果有人的生日是今天,它不会增加一年,因此将它放在列表的最后。

    另请注意,我已在orderBy参数中添加了引号:

    <tr ng-repeat="friend in friends| orderBy:'fromNow' ">