gpt4 book ai didi

javascript - Firebase/MomentJS 不一致的值

转载 作者:行者123 更新时间:2023-11-30 20:43:33 25 4
gpt4 key购买 nike

我有这个:

  init(userId: string = this.authProvider.currentUserId) {
this._subscription.add(this.db.list(`meetings/${userId}`)
.subscribe((meetings: any[]) => {
this._meetings = meetings.map((meeting) => {
meeting.Date = meeting.Date;
meeting.Ends = moment.tz(meeting.Ends, 'HH:mm', meeting.Location.TimeZone).local().format('HH:mm');
meeting.Starts = moment.tz(meeting.Starts, 'HH:mm', meeting.Location.TimeZone).local().format('HH:mm');
return Meeting.Parse(meeting);
});
}));
}

对于来自 firebase 的任何更改,meeting.Startsmeeting.Ends 值在被 moment.tz 解析后保留。

假设第一次订阅 meeting.Starts11:00。在完成 meeting.Starts = moment.tz... 之后,结果会是 13:00 然后下次在 firebase 端发生任何事情并触发订阅时,值假定时区增加 2 小时,Starts 变为 15:00

(firebase 中的值是正确的...)发生了什么?

最佳答案

您似乎在使用 AngularFire2。

问题是您正在改变列表中的项目。当发生变化时,AngularFire2 只更新受变化影响的项目。但是,您正在改变所有项目 - 因此 moment.tz 将重新应用于任何未更改的项目。

一个解决方案是不改变项目:

init(userId: string = this.authProvider.currentUserId) {
this._subscription.add(this.db.list(`meetings/${userId}`)
.subscribe((meetings: any[]) => {
this._meetings = meetings.map(meeting => Meeting.Parse({
...meeting,
Ends: moment.tz(meeting.Ends, 'HH:mm', meeting.Location.TimeZone).local().format('HH:mm'),
Starts: moment.tz(meeting.Starts, 'HH:mm', meeting.Location.TimeZone).local().format('HH:mm');
}));
});
}

或者,没有传播属性语法:

init(userId: string = this.authProvider.currentUserId) {
this._subscription.add(this.db.list(`meetings/${userId}`)
.subscribe((meetings: any[]) => {
this._meetings = meetings.map(meeting => Meeting.Parse(
Object.assign({}, meeting, {
Ends: moment.tz(meeting.Ends, 'HH:mm', meeting.Location.TimeZone).local().format('HH:mm'),
Starts: moment.tz(meeting.Starts, 'HH:mm', meeting.Location.TimeZone).local().format('HH:mm');
})
));
});
}

关于javascript - Firebase/MomentJS 不一致的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48979950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com