我在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(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(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)非常感谢。
继续对第一个答案的评论<<
这是我添加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)
});
答案 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)
});
我建议你: