diff --git a/src/addons/calendar/pages/edit-event/edit-event.html b/src/addons/calendar/pages/edit-event/edit-event.html index 855e6468a..412472045 100644 --- a/src/addons/calendar/pages/edit-event/edit-event.html +++ b/src/addons/calendar/pages/edit-event/edit-event.html @@ -32,7 +32,8 @@ {{ 'core.date' | translate }} </h2> </ion-label> - <ion-datetime formControlName="timestart" [placeholder]="'core.date' | translate" [displayFormat]="dateFormat"> + <ion-datetime formControlName="timestart" [placeholder]="'core.date' | translate" [displayFormat]="dateFormat" + [max]="maxDate" [min]="minDate"> </ion-datetime> <core-input-errors item-content [control]="form.controls.timestart" [errorMessages]="errors"></core-input-errors> </ion-item> @@ -164,9 +165,10 @@ <ion-item (click)="selectDuration('1')"> <ion-radio slot="end" value="1"></ion-radio> <ion-label>{{ 'addon.calendar.durationuntil' | translate }}</ion-label> - <ion-datetime formControlName="timedurationuntil" + <ion-datetime formControlName="timedurationuntil" [max]="maxDate" [min]="minDate" [placeholder]="'addon.calendar.durationuntil' | translate" - [displayFormat]="dateFormat" [disabled]="form.controls.duration.value != 1"></ion-datetime> + [displayFormat]="dateFormat" [disabled]="form.controls.duration.value != 1"> + </ion-datetime> </ion-item> <ion-item (click)="selectDuration('2')"> <ion-radio slot="end" value="2"></ion-radio> diff --git a/src/addons/calendar/pages/edit-event/edit-event.page.ts b/src/addons/calendar/pages/edit-event/edit-event.page.ts index bcb25057c..5d826a466 100644 --- a/src/addons/calendar/pages/edit-event/edit-event.page.ts +++ b/src/addons/calendar/pages/edit-event/edit-event.page.ts @@ -75,6 +75,8 @@ export class AddonCalendarEditEventPage implements OnInit, OnDestroy, CanLeave { eventRepeatId?: number; otherEventsCount = 0; eventId?: number; + maxDate: string; + minDate: string; // Form variables. form: FormGroup; @@ -94,7 +96,6 @@ export class AddonCalendarEditEventPage implements OnInit, OnDestroy, CanLeave { protected fb: FormBuilder, @Optional() protected svComponent: CoreSplitViewComponent, ) { - this.currentSite = CoreSites.getCurrentSite()!; this.errors = { required: Translate.instant('core.required'), @@ -122,6 +123,9 @@ export class AddonCalendarEditEventPage implements OnInit, OnDestroy, CanLeave { this.form.addControl('repeat', this.fb.control(false)); this.form.addControl('repeats', this.fb.control('1')); this.form.addControl('repeateditall', this.fb.control(1)); + + this.maxDate = CoreTimeUtils.getDatetimeDefaultMax(); + this.minDate = CoreTimeUtils.getDatetimeDefaultMin(); } /** diff --git a/src/addons/mod/data/fields/date/component/addon-mod-data-field-date.html b/src/addons/mod/data/fields/date/component/addon-mod-data-field-date.html index 4d1c12b81..f6bcd38db 100644 --- a/src/addons/mod/data/fields/date/component/addon-mod-data-field-date.html +++ b/src/addons/mod/data/fields/date/component/addon-mod-data-field-date.html @@ -1,7 +1,8 @@ <span *ngIf="inputMode && form" [formGroup]="form"> <span *ngIf="editMode" [core-mark-required]="field.required" class="core-mark-required"></span> - <ion-datetime [formControlName]="'f_'+field.id" [placeholder]="'core.date' | translate" - [disabled]="searchMode && !searchFields!['f_'+field.id+'_z']" [displayFormat]="format"></ion-datetime> + <ion-datetime [formControlName]="'f_'+field.id" [placeholder]="'core.date' | translate" [max]="maxDate" [min]="minDate" + [disabled]="searchMode && !searchFields!['f_'+field.id+'_z']" [displayFormat]="format"> + </ion-datetime> <core-input-errors *ngIf="error && editMode" [control]="form.controls['f_'+field.id]" [errorText]="error"></core-input-errors> <ion-item *ngIf="searchMode"> diff --git a/src/addons/mod/data/fields/date/component/date.ts b/src/addons/mod/data/fields/date/component/date.ts index fcf20c918..5639572e9 100644 --- a/src/addons/mod/data/fields/date/component/date.ts +++ b/src/addons/mod/data/fields/date/component/date.ts @@ -28,6 +28,8 @@ export class AddonModDataFieldDateComponent extends AddonModDataFieldPluginCompo format!: string; displayDate?: number; + maxDate?: string; + minDate?: string; /** * @inheritdoc @@ -43,6 +45,8 @@ export class AddonModDataFieldDateComponent extends AddonModDataFieldPluginCompo this.format = CoreTimeUtils.fixFormatForDatetime(CoreTimeUtils.convertPHPToMoment( Translate.instant('core.strftimedate'), )); + this.maxDate = CoreTimeUtils.getDatetimeDefaultMax(); + this.minDate = CoreTimeUtils.getDatetimeDefaultMin(); if (this.searchMode) { this.addControl('f_' + this.field.id + '_z'); diff --git a/src/addons/userprofilefield/datetime/component/datetime.ts b/src/addons/userprofilefield/datetime/component/datetime.ts index 8f350740c..d494cf549 100644 --- a/src/addons/userprofilefield/datetime/component/datetime.ts +++ b/src/addons/userprofilefield/datetime/component/datetime.ts @@ -33,8 +33,8 @@ import { CoreLang } from '@services/lang'; export class AddonUserProfileFieldDatetimeComponent extends CoreUserProfileFieldBaseComponent { format?: string; - min?: number; - max?: number; + min?: string; + max?: string; valueNumber = 0; monthNames?: string[]; @@ -66,20 +66,17 @@ export class AddonUserProfileFieldDatetimeComponent extends CoreUserProfileField )); // Check min value. - if (field.param1) { - const year = parseInt(field.param1, 10); - if (year) { - this.min = year; - } + if (field.param1 && Number(field.param1)) { + this.min = field.param1; } // Check max value. - if (field.param2) { - const year = parseInt(field.param2, 10); - if (year) { - this.max = year; - } + if (field.param2 && Number(field.param2)) { + this.max = field.param2; } + + this.max = this.max || CoreTimeUtils.getDatetimeDefaultMin(); + this.max = this.max || CoreTimeUtils.getDatetimeDefaultMax(); } /** diff --git a/src/core/services/utils/time.ts b/src/core/services/utils/time.ts index 7439be193..c9202cb72 100644 --- a/src/core/services/utils/time.ts +++ b/src/core/services/utils/time.ts @@ -367,6 +367,20 @@ export class CoreTimeUtilsProvider { } } + /** + * Get the default max year for datetime inputs. + */ + getDatetimeDefaultMax(): string { + return String(moment().year() + 20); + } + + /** + * Get the default min year for datetime inputs. + */ + getDatetimeDefaultMin(): string { + return String(moment().year() - 20); + } + } export const CoreTimeUtils = makeSingleton(CoreTimeUtilsProvider);