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!