javascript - Angular - Visa en alert om tidszonen inte matchar i moment()
Jag arbetar på ett Angular-projekt. Där kommer användare endast kunna skapa uppgifter för idag eller kommande datum med hjälp av datumväljaren.
Jag använder <mat-datepicker> med moment för att inaktivera tidigare datum.
<mat-form-field formGroupName="user">
<mat-label>Due Date</mat-label>
<input
matInput
[min]="dueDateMin"
[matDatepicker]="picker"
(click)="picker.open()"
placeholder="Choose a date"
formControlName="date"
(dateChange)="setTaskDueDate($event.value); checkAvailableEfforts()"
required
/>
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-hint>Task completion date.</mat-hint>
<mat-error>Due date is required</mat-error>
<mat-datepicker #picker></mat-datepicker>
</mat-form-field>
I komponent
dueDateMin = moment();
Problem: Användaren kan aktivera fälten genom att ändra tidszonen på sin webbläsare.
Fråga: Finns det något alternativ genom vilket jag kan visa en alert i appen om användaren öppnar appen i en annan tidszon än den angivna tidszonen. Till exempel: "Asia/Calcutta" indisk tidszon.
eller Använd samma tidszon oavsett användarens maskins tidszon.
Tack i förväg!
Svar #1
För att ha en fast tid, försök att ställa in din standardtid till den zon du behöver.
moment.tz.setDefault(your_timezone);
Till exempel:
moment.tz.setDefault("America/New_York");
Svar #2
Du bör undvika att sätta en tidsstämpel från din front-end-kod eftersom användarens klocka kanske inte är korrekt synkroniserad. Om du behöver sätta en tidsstämpel på ett dokument, använd Firestore-serverns tidsstämpel som säkerställer att alla användare delar samma klocka. Använd serverTimeStamp för konsistenta tider. Se kodexempel nedan -
const { serverTimestamp, increment }=firebase.firestore.FieldValue; ref.update({ timestamp: serverTimestamp() })
Hoppas det här hjälper!
