AngularJS显示两个日期而没有两次显示相似的部分

时间:2015-05-05 17:03:24

标签: javascript angularjs datetime

如何很好地显示由两个日期组成的日期范围?我正在寻找的主要事情是,如果两个日期相同,则不要显示两次。我在想这样的事情:

  

2015年5月5日星期二19:31-20:31 GMT

     

星期一,04 19:31 - 2015年5月5日星期二,20:31

如果有一些重叠可以,例如:

  

5月4日星期一,19:31 - 2015年5月5日星期五,20:31

目标是为用户提供一些好看的东西。我不知道从哪里开始这个 - 现在我只知道如何显示两个完整日期。我没有能够在我的搜索中找到任何东西 - 很多关于如何格式化个别日期,但没有什么可以格式化两个日期。

我使用的是AngularJS,但如果你知道如何在没有Angular的情况下做到这一点,那就没关系了。

1 个答案:

答案 0 :(得分:2)

您问题中的标签建议您要格式化AngularJS中的日期范围。但是,这似乎是一个普遍的Javascript问题,除非你想要使用Angular过滤器优雅地解决问题。

我建议您使用MomentJS,它具有许多实用功能,可用于格式化和比较日期。 moment-range也可以为您提供一些方便的方法,但我没有看到任何格式化方法。

var date1 = momentjs('2015-05-05 12:15');
var date2 = momentjs('2015-05-10 12:15');

这些日期有重叠的年,月和时间。您可以使用date1.isSame(date2, 'year')检测到此信息。用月,日,时等做这个。

然后使用date1.format(...) + ' - ' + date2.format(...)格式化您的范围,具体取决于日期属性相同。

如果需要,请将所有代码包装在Angular过滤器中:

angular.module('myApp').filter('dateRange', function () {
  return function (date1, date2) {
    // date range stuff here
  };
});

date1

上设置date2$scope后,在模板中使用过滤器
{{date1 | dateRange:date2}}