【发布时间】:2017-09-21 02:25:14
【问题描述】:
这是我的控制器:
private day: any = '';
private add: number = 0;
private remove: number = 0;
private days: any = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
dayBefore() {
let now = new Date();
this.remove += 1;
let newDate = this.decrementDays(now, this.remove);
this.day = this.days[newDate.getDay()];
}
dayAfter() {
let now = new Date();
this.add += 1;
let newDate = this.incrementDays(now, this.add);
this.day = this.days[newDate.getDay()];
}
dayToday() {
let now = new Date();
this.day = this.days[now.getDay()];
this.add = 0;
this.remove = 0;
}
decrementDays: any = function removeDay(date: any, days: any) {
return new Date(date.getFullYear(), date.getMonth(), date.getDate() - days, date.getHours(), date.getSeconds(), date.getMilliseconds());
};
incrementDays: any = function addDay(date: any, days: any) {
return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days, date.getHours(), date.getSeconds(), date.getMilliseconds());
};
HTML:
<ul>
<li (click)="dayBefore()"></li>
<li (click)="dayToday()"></li>
<li (click)="dayAfter()"></li>
</ul>
<span>{{day}}</span>
这个问题是,虽然递增和递减有效,但当我想在 dayAfter() 之后转到 dayBefore() 时,我不会立即转到前一天的日期。
如果我点击dayAfter(),它将带我到Tuesday(如果今天是Monday)and 当我点击dayBefore() 时,它会带我到Sunday,而不是星期一。我该如何解决这个问题?我知道为什么会这样。这是因为它是从今天的日期 (Monday) 开始计算的,而不是从我停止它的地方开始计算的。
谢谢大家。
【问题讨论】:
-
只是备注,请不要写
days: any = ["Sunday", ...,您正在丢弃有价值的信息并编写超出您需要的代码。请改写days = ["Sunday", ...。 -
只使用一个变量来跟踪添加/删除的天数。因此,不要使用两个变量
add和remove,而是只使用一个变量,然后在dayBefore和dayAfter函数中将其更改为一个。 -
伙计们等一下:)
-
仍然没有解决我提出的问题..
-
你的函数和变量太多了。基本上就像@Titus说的那样。也不需要递增和递减。
标签: javascript html angular date typescript