Javascript 从停止日期开始递增和递减

Javascript 从停止日期开始递增和递减,javascript,html,angular,date,typescript,Javascript,Html,Angular,Date,Typescript,这是我的控制器: 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.remov

这是我的控制器:

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:

{{day}
问题是,尽管递增和递减都有效,但当我想在
dayAfter()之后转到
dayBefore()
时,我不会立即转到前一天的日期

如果我点击
dayAfter()
它会把我带到
周二
(如果今天是
周一
当我点击
dayAfter()
它会把我带到
周日
,而不是周一。我怎样才能解决这个问题?我知道为什么会这样。这是因为它从今天开始计数(
星期一
),而不是从我停止计数的地方

谢谢大家。

试试这个:

private day: any = '';
private add: number = 0;
private remove: number = 0;
private days: any = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
private today = new Date();

dayBefore() {
    let newDate = this.decrementDays(1);
    this.day = this.days[newDate.getDay()];
}

dayAfter() {
    let newDate = this.incrementDays(1);
    this.day = this.days[newDate.getDay()];
}

dayToday() {
    this.today = new Date();
    this.day = this.days[this.today.getDay()];
}

decrementDays: any = function removeDay(days: any) {
let date = this.today;
this.today = new Date(date.getFullYear(), date.getMonth(), date.getDate() - days, date.getHours(), date.getSeconds(), date.getMilliseconds());
return this.today;
};

incrementDays: any = function addDay(days: any) {
let date = this.today;
this.today = new Date(date.getFullYear(), date.getMonth(), date.getDate() + days, date.getHours(), date.getSeconds(), date.getMilliseconds());
return this.today;
};
这可以进一步重构,也可以简化。我刚做了一个快速修复。

试试这个:

private day: any = '';
private add: number = 0;
private remove: number = 0;
private days: any = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
private today = new Date();

dayBefore() {
    let newDate = this.decrementDays(1);
    this.day = this.days[newDate.getDay()];
}

dayAfter() {
    let newDate = this.incrementDays(1);
    this.day = this.days[newDate.getDay()];
}

dayToday() {
    this.today = new Date();
    this.day = this.days[this.today.getDay()];
}

decrementDays: any = function removeDay(days: any) {
let date = this.today;
this.today = new Date(date.getFullYear(), date.getMonth(), date.getDate() - days, date.getHours(), date.getSeconds(), date.getMilliseconds());
return this.today;
};

incrementDays: any = function addDay(days: any) {
let date = this.today;
this.today = new Date(date.getFullYear(), date.getMonth(), date.getDate() + days, date.getHours(), date.getSeconds(), date.getMilliseconds());
return this.today;
};
@Component({
  // boilerplate and ceremony
})
export class DayOfWeekComponent {
  days = [
    "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
  ];

  dayOfWeek = new Date().getDay();

  resetDayOfWeek() {
    this.dayOfWeek = new Date().getDay();
  }

  offsetDayOfWeek(offset: number) {
    let dayOfWeek = (this.dayOfWeek + offset) % 7;
    if (dayOfWeek < 0) {
      dayOfWeek += 7;
    }
    this.dayOfWeek = dayOfWeek;
  }
}
这可以进一步重构,也可以简化。我刚刚做了一个快速修复。

@Component({
@Component({
  // boilerplate and ceremony
})
export class DayOfWeekComponent {
  days = [
    "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
  ];

  dayOfWeek = new Date().getDay();

  resetDayOfWeek() {
    this.dayOfWeek = new Date().getDay();
  }

  offsetDayOfWeek(offset: number) {
    let dayOfWeek = (this.dayOfWeek + offset) % 7;
    if (dayOfWeek < 0) {
      dayOfWeek += 7;
    }
    this.dayOfWeek = dayOfWeek;
  }
}
//样板和仪式 }) 导出类DayOfWeekComponent{ 天数=[ “星期日”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”、“星期日” ]; dayOfWeek=新日期().getDay(); resetDayOfWeek(){ this.dayOfWeek=新日期().getDay(); } offsetDayOfWeek(偏移量:编号){ 设dayOfWeek=(this.dayOfWeek+offset)%7; 如果(星期日<0){ 星期五+=7天; } this.dayOfWeek=dayOfWeek; } }
模板:

<ul>
    <li (click)="offsetDayOfWeek(-1)">Previous</li>
    <li (click)="resetDayOfWeek()">Today</li>
    <li (click)="offsetDayOfWeek(1)">Next</li>
</ul>

<span>{{days[dayOfWeek]}}</span>
    Previous 今天 下一步
{{天[星期五]}

@组件({
//样板和仪式
})
导出类DayOfWeekComponent{
天数=[
“星期日”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”、“星期日”
];
dayOfWeek=新日期().getDay();
resetDayOfWeek(){
this.dayOfWeek=新日期().getDay();
}
offsetDayOfWeek(偏移量:编号){
设dayOfWeek=(this.dayOfWeek+offset)%7;
如果(星期日<0){
星期五+=7天;
}
this.dayOfWeek=dayOfWeek;
}
}
模板:

<ul>
    <li (click)="offsetDayOfWeek(-1)">Previous</li>
    <li (click)="resetDayOfWeek()">Today</li>
    <li (click)="offsetDayOfWeek(1)">Next</li>
</ul>

<span>{{days[dayOfWeek]}}</span>
    Previous 今天 下一步
{{天[星期五]}


只是一句话,请不要写
days:any=[“Sunday”…
您正在丢弃有价值的信息,并编写超出需要的代码。写
days=[“Sunday”,…
相反。只使用一个变量来跟踪添加/删除了多少天。因此,不要使用两个变量
add
remove
只使用一个变量,并在
dayBefore
dayAfter
函数中逐个更改。给我一分钟,伙计们:)但是,它并没有解决我提出的问题。你我有太多的函数和变量。这基本上就像@Titus所说的。有增量和减量也是不必要的。只是一句话,请不要写
days:any=[“Sunday”…
你在浪费有价值的信息,写的代码比你需要的要多。写
days=[“Sunday”,…
相反。只使用一个变量来跟踪添加/删除了多少天。因此,不要使用两个变量
add
remove
只使用一个变量,并在
dayBefore
dayAfter
函数中逐个更改。给我一分钟,伙计们:)但是,它并没有解决我提出的问题。你我有太多的函数和变量。这基本上就像@Titus说的。有增量和减量也是不必要的。@eric.dummy你现在面临什么问题?@eric.dummy它传递了一个变量。我把它改成了一个常量。它有效吗?dayToday()不起作用,其他一切似乎都正常:)@eric.dummy您希望它始终是当前日期吗?@eric.dummy没问题:)@eric.dummy您现在面临什么问题?@eric.dummy它传递了一个变量。我将其更改为常量。它起作用了吗?dayToday()不起作用,其他一切似乎都很好:)@eric.dummy你希望它一直是今天吗?@eric.dummy没问题:)我有一个错误,因子是7而不是6:oI注意到了,修复了:)8天背后的逻辑是什么?很好,我也修复了。需要先取模。你不需要,它仍然有效,但现在是问题非常干净。:)谢谢。我有一个错误,系数是7而不是6:我注意到了,修复了。:)8天之后的逻辑是什么?很好,我也修复了。需要先取模数。你不需要,它仍然有效,但现在可能更干净。:)谢谢。