Angular 角日历

Angular 角日历,angular,calendar,Angular,Calendar,我需要日历中的日期从当前日期开始,而不是显示过去的日期,因为日历选择从星期日开始的日期。
从上午8点到凌晨2点显示的时间。我希望2点钟是时刻表上的最后一点 日历组件 键入CalendarPeriod='day'|'week'|'month'; 函数addPeriod(期间:日历期间,日期:日期,金额:编号):日期{ 返回{ 日期:addDays, 周:每周, 月份:新增月份 }[期间](日期、金额); } 函数子期间(期间:日历期间,日期:日期,金额:编号):日期{ 返回{ 日:次日, 周:子

我需要日历中的日期从当前日期开始,而不是显示过去的日期,因为日历选择从星期日开始的日期。
从上午8点到凌晨2点显示的时间。我希望2点钟是时刻表上的最后一点

日历组件
键入CalendarPeriod='day'|'week'|'month';
函数addPeriod(期间:日历期间,日期:日期,金额:编号):日期{
返回{
日期:addDays,
周:每周,
月份:新增月份
}[期间](日期、金额);
}
函数子期间(期间:日历期间,日期:日期,金额:编号):日期{
返回{
日:次日,
周:子周,
月份:次月份
}[期间](日期、金额);
}
函数startOfPeriod(期间:日历期间,日期:日期):日期{
返回{
日期:开始日期,
周:开始每周,
月份:开始月份
}[期间](日期);
}
函数endOfPeriod(期间:日历期间,日期:日期):日期{
返回{
日期:截止日期,
周:周末,
月份:月底,
}[期间](日期);
}
视图:CalendarView=CalendarView.Week;
minDate:日期=新日期();
maxDate:Date=addMonths(新日期(),1);
prevBtnDisabled:布尔值=false;
nextBtnDisabled:布尔值=false;
viewDate:日期=新日期();
莫达尔达:{
操作:字符串;事件:CalendarEvent;
};
操作:CalendarEventAction[]=[{
标签:“”,onClick:({event}:{event:CalendarEvent}):void=>{
此.handleEvent('Edited',事件);
}
}, {
标签:“”,onClick:({event}:{event:CalendarEvent}):void=>{
this.events=this.events.filter(iEvent=>iEvent!==event);
此.handleEvent('Deleted',事件);
}
}];
刷新:主题=新主题();
事件:CalendarEvent[]=[
];
日历组件
handleEvent(操作:字符串,事件:CalendarEvent):无效{
this.form.setValue('start',event.start);
this.form.setValue('end',event.end);
this.form.setValue('title',event.title);
}
beforeWeekViewRender(renderEvent:CalendarWeekViewBeforeRenderEvent){
renderEvent.hourColumns.forEach(hourColumn=>{
hourColumn.hours.forEach(小时=>{
hour.segments.forEach(segments=>{
如果(
段.date.getHours()>=9&&
段.date.getDay()==3
) {
//segment.cssClass='bg绿色';
}
});
});
});
}
eventTimesChanged({event,newStart,newEnd}:CalendarEventTimesChangedEvent):无效{
event.start=newStart;
event.end=newEnd;
此.handleEvent('已删除或调整大小',事件);
this.refresh.next();
}
小时数(日期){
this.clickedDate=日期;
此.form.setValue('start',date');
this.show_form=true;
}
dayClicked({date,events}:{date:date;events:CalendarEvent[]}):无效{
if(isSameMonth(日期,this.viewDate)){
if((isSameDay(this.viewDate,date)&&this.activeDayIsOpen==true)| | events.length==0){
this.activeDayIsOpen=false;
}否则{
this.activeDayIsOpen=true;
this.viewDate=日期;
}
}
}
增量():void{
this.changeDate(addPeriod(this.view,this.viewDate,1));
}
减量():无效{
this.changeDate(子时段(this.view,this.viewDate,1));
}
今天():无效{
此.changeDate(新日期());
}
dateIsValid(日期:date):布尔值{
返回日期>=this.minDate&&date this.maxDate){
this.changeDate(this.maxDate);
}
}
beforeMonthViewRender({body}:{body:CalendarMonthViewDay[]}):无效{
body.forEach(天=>{
如果(!this.dateIsValid(day.date)){
day.cssClass='cal disabled';
}
});
}
日历Html

{{viewDate | calendarDate:(view+'ViewTitle'):locale}
索特
Calendar Component
type CalendarPeriod = 'day' | 'week' | 'month';

function addPeriod(period: CalendarPeriod, date: Date, amount: number): Date {
  return {
    day: addDays,
    week: addWeeks,
    month: addMonths
  }[period](date, amount);
}

function subPeriod(period: CalendarPeriod, date: Date, amount: number): Date {
  return {
    day: subDays,
    week: subWeeks,
    month: subMonths
  }[period](date, amount);
}

function startOfPeriod(period: CalendarPeriod, date: Date): Date {
  return {
    day: startOfDay,
    week: startOfWeek,
    month: startOfMonth
  }[period](date);
}

function endOfPeriod(period: CalendarPeriod, date: Date): Date {
  return {
    day: endOfDay,
    week: endOfWeek,
    month: endOfMonth,

  }[period](date);
}



  view: CalendarView = CalendarView.Week;
  minDate:Date =  new Date();
  maxDate: Date = addMonths(new Date(), 1);
  prevBtnDisabled: boolean = false;
  nextBtnDisabled: boolean = false;
  viewDate: Date = new Date();


  modalData: {
    action: string; event: CalendarEvent;

  };
  actions: CalendarEventAction[] = [{
    label: '<i class="editButton"></i>', onClick: ({event}: { event: CalendarEvent }): void => {
      this.handleEvent('Edited', event);
    }
  }, {
    label: '<i class="deleteButton"></i>', onClick: ({event}: { event: CalendarEvent }): void => {
      this.events = this.events.filter(iEvent => iEvent !== event);
      this.handleEvent('Deleted', event);
    }
  }];

  refresh: Subject<any> = new Subject();


  events: CalendarEvent[] = [

  ];

Calendar Component
  handleEvent(action: string, event: CalendarEvent): void {

    this.form.setValue('start', event.start);
    this.form.setValue('end', event.end);
    this.form.setValue('title', event.title);

  }

  beforeWeekViewRender(renderEvent: CalendarWeekViewBeforeRenderEvent) {
  renderEvent.hourColumns.forEach(hourColumn => {
      hourColumn.hours.forEach(hour => {
        hour.segments.forEach(segment => {
          if (
            segment.date.getHours() >= 9 &&
            segment.date.getDay() === 3
          ) {
            // segment.cssClass = 'bg-green';
          }
        });
      });
    });
  }

  eventTimesChanged({event, newStart, newEnd}: CalendarEventTimesChangedEvent): void {
    event.start = newStart;
    event.end = newEnd;
    this.handleEvent('Dropped or resized', event);
    this.refresh.next();
  }

  hoursSegmentClicked(date){

    this.clickedDate = date;
    this.form.setValue('start',date);

    this.show_form = true;

  }



  dayClicked({date, events}: { date: Date; events: CalendarEvent[] }): void {
    if (isSameMonth(date, this.viewDate)) {
      if ((isSameDay(this.viewDate, date) && this.activeDayIsOpen === true) || events.length === 0) {
        this.activeDayIsOpen = false;
      } else {
        this.activeDayIsOpen = true;
        this.viewDate = date;
      }
    }
  }


  increment(): void {
    this.changeDate(addPeriod(this.view, this.viewDate, 1));
  }

  decrement(): void {
    this.changeDate(subPeriod(this.view, this.viewDate, 1));
  }

  today(): void {
    this.changeDate(new Date());
  }

  dateIsValid(date: Date): boolean {
    return date >= this.minDate && date <= this.maxDate;
  }

  changeDate(date: Date): void {
    this.viewDate = date;
    this.dateOrViewChanged();
  }

  changeView(view: CalendarPeriod): void {
    // this.view = view;
    this.dateOrViewChanged();
  }

  dateOrViewChanged(): void {
    this.prevBtnDisabled = !this.dateIsValid(
      endOfPeriod(this.view, subPeriod(this.view, this.viewDate, 1))
    );
    this.nextBtnDisabled = !this.dateIsValid(
      startOfPeriod(this.view, addPeriod(this.view, this.viewDate, 1))
    );
    if (this.viewDate < this.minDate) {
      this.changeDate(this.minDate);
    } else if (this.viewDate > this.maxDate) {
      this.changeDate(this.maxDate);
    }
  }

  beforeMonthViewRender({ body }: { body: CalendarMonthViewDay[] }): void {
    body.forEach(day => {
      if (!this.dateIsValid(day.date)) {
        day.cssClass = 'cal-disabled';
      }
    });
  }

Calendar Html

      <div class="card-header d-flex flex-wrap justify-content-md-between no-gutters px-3 py-2" style="z-index:5">
        <div class="col-xs-12 col-sm-6 align-self-center text-center text-sm-left">
          <h3 class="mb-0 fw-100">{{ viewDate | calendarDate:(view + 'ViewTitle'):locale }}</h3>
        </div>
        <div class="d-flex justify-content-end col-xs-12 col-sm-6 text-right pt-3 pt-sm-0">
          <div class="btn-group mr-auto mr-sm-0">
            <div class="btn-group">
              <button
                class="btn btn-secondary px-3"
                (click)="decrement()"
                [disabled]="prevBtnDisabled"
              >
                <i class="icon ion-ios-arrow-back"></i>
              </button>
              <button class="btn btn-outline-secondary" (click)="today()">Sot</button>
              <button class="btn btn-secondary px-3"
                      (click)="increment()"
                      [disabled]="nextBtnDisabled"
              >
                <i class="icon ion-ios-arrow-forward"></i>
              </button>
            </div>

          </div>

        </div>
      </div>
      <div [ngSwitch]="view">
            <mwl-calendar-month-view    *ngSwitchCase="'month'" [viewDate]="viewDate" [events]="events" [locale]="locale" [refresh]="refresh"
                                        [activeDayIsOpen]="activeDayIsOpen" (dayClicked)="dayClicked($event.day)"
                                        (eventClicked)="handleEvent('Clicked', $event.event)"
                                        (eventTimesChanged)="eventTimesChanged($event)">
            </mwl-calendar-month-view>


        <mwl-calendar-week-view    *ngSwitchCase="'week'"
                                   [viewDate]="viewDate"
                                   [events]="events"
                                   [locale]="locale"
                                   [dayStartHour]="8"
                                   [hourSegments]="1"
                                   [hourSegmentHeight]="60"
                                   (hourSegmentClicked)="hoursSegmentClicked($event.date)"
                                   [refresh]="refresh"
                                   (beforeViewRender)="beforeWeekViewRender($event)"
                                   (eventClicked)="handleEvent('Clicked', $event.event)"
                                   (eventTimesChanged)="eventTimesChanged($event)">
        </mwl-calendar-week-view>
            <mwl-calendar-day-view    *ngSwitchCase="'day'" [viewDate]="viewDate" [events]="events" [locale]="locale" [refresh]="refresh"
                                      (eventClicked)="handleEvent('Clicked', $event.event)"
                                      (eventTimesChanged)="eventTimesChanged($event)">
            </mwl-calendar-day-view>
      </div>