Angular 2 Firebase返回对象计数

时间:2017-03-31 14:35:04

标签: angular date firebase time angularfire

我在Angular 2工作并有预订部分。

预订完成后,信息将发送到预订节点中的firebase数据库。

如果管理员今天有任何预订,我试图在应用程序的主屏幕仪表板上显示。在我的组件中,我使用Angularfire订阅了firebase中的预订节点,如下所示:

this.bookingItemsData = af.database.list('/bookings');
this.bookingItemsData.subscribe((res) => {
  this.bookingItems = res;
  console.log(res);

我想获取当前日期并将其与firebase预订节点中的日期进行比较,因此要获取当前日期,我已添加此内容:

//get current date
    var getToday = new Date();
    var year = getToday.getFullYear();
    var month = getToday.getMonth() + 1;
    var day = getToday.getDate();
    // var time =  getToday.getTime();
    var currentDate = day + "/" + month + "/" + year;

成功获得了我所要求的当前日期。

我现在运行这个来获取预订的日期:

// Get count of bookings
    af.database.list('/bookings').subscribe((res) => {
        this.numbeOfBookings = res.length;
        res.forEach(item => {
        //get the date propery from the bookings node  
        var specialDate = (item.start);
        //transform the date property to matching format
        specialDate = this.datePipeEn.transform(new Date(item.start), 'dd/M/yyyy');

        // console.log(specialDate);
        // console.log(currentDate);

          if(specialDate === currentDate) {
          console.log(specialDate);
          } 

        });
    });

我首先获得预订列表中的预订数量,

然后我遍历预订并将预订日期分配给变量' specialDate'使用ForEach声明

然后我通过datePipe运行变量以将预订日期输出与所需格式匹配,

然后我运行一个if语句来查看我的返回日期是否与当前日期匹配。

当我调试.log我的specialDate我得到的是从今天的日期返回的一个日期,这很棒。

console log

但是当我做console.log(specialDate.length)

它计算日期中的字符而不是返回' 1' (匹配预订的日期到当前日期。

所以我想我要返回的是一个字符串,它计算的不是返回一个对象。如何获得与currentDate匹配日期的对象的计数?

更新:

我设法使用以下代码将与当前日期匹配的唯一预订作为对象返回:

// Get count of bookings
af.database.list('/bookings').subscribe((res) => {
    this.numbeOfBookings = res.length;
    res.forEach(item => {
    //get the date propery from the bookings node  
    var specialDate = (item.start);
    //transform the date property to matching format
    specialDate = this.datePipeEn.transform(new Date(item.start), 'dd/M/yyyy');

      if(specialDate === currentDate) {
        console.log(item);
      } 

    });
});

在控制台日志中,我看到唯一的对象是与今天日期匹配的预订。

console log

但是,如果我这样做:console.log(item.length);它计算对象中的键,而不是返回数字' 1'我希望。 (与今天相匹配的预订金额)

对于返回的1个对象,如何返回数字1?

更新

我设法得到返回的对象数,即1:)

这是我做的,我必须使每个项目成为一个对象,然后将返回的对象放入一个数组然后我可以成功console.log我之后返回的值! :)

 // Get count of bookings
this.test = af.database.list('/bookings').subscribe((res) => {
    this.numbeOfBookings = res.length;

    res.forEach(item => {      
      var bookingDate = (item.start); //get the date propery from the bookings node        
      bookingDate = this.datePipeEn.transform(new Date(item.start), 'dd/M/yyyy'); //transform the date property to matching format
      var myObj = {item}; // Put each returned item into an object
      var array = $.map(myObj, function (value, index) { // Create an array with the returned objects
        return [value];
      });

      if(bookingDate === currentDate) {

        var bookingsToday = array
        var bookingsCount = array.length
        // console.log(bookingsToday);
        return(bookingsCount);

      } 

    });
});

但我确实有一个最后的问题。

我如何使用{{interpolation}}来引用此返回的预订帐户'我的html模板中的值? (Angular 2)非常感谢。

  
    

继续对第一个答案的评论<<

  

new screenshot of console

这是我添加console.log(specialDate,currentDate)时控制台的屏幕截图;

这是代码:

af.database.list('/bookings').subscribe((res) => {
    var i = 0 
    this.numbeOfBookings = res.length;
    res.forEach(item => {
        var specialDate = (item.start);
        specialDate = this.datePipeEn.transform(new Date(item.start),'dd/M/yyyy');
        console.log(specialDate,currentDate);
          if(specialDate === currentDate) {
            i++ 
            console.log(item)
          } 

        });
    //use you variable here
    console.log(i)
    });

1 个答案:

答案 0 :(得分:0)

你必须在if if语句中增加一个变量,在forEach之后你可以使用你的变量:

af.database.list('/bookings').subscribe((res) => {
var i = 0 <----------- init a variable
this.numbeOfBookings = res.length;
res.forEach(item => {
    var specialDate = (item.start);
    specialDate = this.datePipeEn.transform(new Date(item.start),'dd/M/yyyy');
      console.log(specialDate,currentDate); <-----------
      if(specialDate === currentDate) {
        i++ <-------------- increment it each time the date is the same
        console.log(item);
      } 

    });
//use you variable here
console.log(i)
});

我建议你:

  1. 使用,angularfire(官方角度2火力基地)你可以在github找到它,
  2. 如果您使用angularfire,请尝试查询,并从服务器获取匹配日期的列表
  3. 如果您不需要实时功能,最终的建议是退出firebase,即便如此,尝试使用lambda的AWS dynamo,或者使用socket.io和Mlab(免费mongodb作为服务)让你变脏。