Это мой контроллер:

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>

Проблема в том, что, хотя увеличение и уменьшение работают, когда я хочу перейти к dayBefore() после dayAfter(), я не сразу обращаюсь к дате, которая была накануне.

Если я нажму на dayAfter(), я перейду к Tuesday (если сегодня Monday) and, когда я нажму на dayBefore(), и на {{ X5}} вместо понедельника. Как именно я могу это исправить? Я знаю, почему это происходит. Это потому, что он начинает считать с сегодняшней даты (Monday), а не с того места, где я остановил его.

Спасибо, парни.

0
eric.dummy 24 Апр 2017 в 15:00

2 ответа

Лучший ответ
@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;
  }
}

Шаблон:

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

<span>{{days[dayOfWeek]}}</span>

https://plnkr.co/edit/7is6uMGtkvcQ5V4VzqYp?p=preview

1
Aluan Haddad 24 Апр 2017 в 12:51

Попробуй это:

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;
};

Это может быть дополнительно переработано и может быть упрощено. Я только что сделал быстрое решение.

1
Md Hasan Ibrahim 24 Апр 2017 в 12:38
43587511