Как исправить проблему локализации выбора Datetime - PullRequest
0 голосов
/ 18 февраля 2020

У меня проблема с датой, например, если я ввожу дату 18/02/2020 , дата сохраняется в базе данных: 17/02/2020 22:00: 00 !!! обычно это проблема часового пояса или нет? как исправить эту проблему и спасибо. Если я хочу сохранить дату с UT C, как это сделать?

код. html:

<ng-template #datepicker>
  <label title="{{cell.about}}" class="col-lg-5 col-md-5 col-sm-5 col-xs-5 " style="margin-top: 5px;">{{cell.label}} <span class="br-required-star" *ngIf="cell.required">*</span></label>
  <div class="col-lg-7 col-md-7 col-sm-7 col-xs-7 " style="padding: 0px;">
    <ng-container *ngIf="cell.type === 'date';else select2">
      <mat-form-field class="date-Picker-br-object">
        <input [disabled]="!cell.editable" name="{{cell.id}}" [required]="cell.required" style="width: 100% !important;" matInput [matDatepicker]="i" [(ngModel)]="cell.value" [disabled]="!cell.editable">
        <mat-datepicker-toggle matSuffix [for]="i"></mat-datepicker-toggle>
        <mat-datepicker #i></mat-datepicker>
      </mat-form-field>
    </ng-container>
    <div *ngIf="brDetailsForm.controls[i] && !brDetailsForm.controls[i].valid && !brDetailsForm.controls[i].pristine" class="alert alert-danger errorMessage">{{msgRequired(cell.label)}}</div>
    <div *ngIf="otherErrorMessages && otherErrorMessages[i]" class="alert alert-danger errorMessage">{{otherErrorMessages[i]}}</div>
  </div>
</ng-template>

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Я исправил свою проблему. Я создал компонент с именем format-datepicker.
format-datepicker.ts:

import { NativeDateAdapter, DateAdapter, MAT_DATE_FORMATS, MatDateFormats } from "@angular/material";
import * as moment from 'moment';

export class AppDateAdapter extends NativeDateAdapter {

    parse(value: any): Date | null {
        if ((typeof value === 'string') && (value.indexOf('/') > -1)) {
          const str = value.split('/');
          const year = Number(str[2]);
          const month = Number(str[1]) - 1;
          const date = Number(str[0]);
          return new Date(Date.UTC(year, month, date));
        }
        const timestamp = typeof value === 'number' ? value : Date.parse(value);
        return isNaN(timestamp) ? null : new Date(timestamp);
      }

      createDate(year: number, month: number, date: number): Date {
        return new Date(Date.UTC(year, month, date));
      }

      format(date: Date, displayFormat: Object): string {
        let now = moment();
        if (displayFormat === 'input') {
          let day: string = date.getUTCDate().toString();
          day = +day < 10 ? '0' + day : day;
          let month: string = (date.getUTCMonth() + 1).toString();
          month = +month < 10 ? '0' + month : month;
          let year = date.getUTCFullYear();
          return `${day}/${month}/${year}`;

        }
        // new Date(date.toDateString()).getUTCDate(); 
        return date.toDateString();

      }

   private _to2digit(n: number) {
       return (n);
       //return ('00' + n).slice(-2);
   } 
}

export const APP_DATE_FORMATS =
{
   parse: {
       dateInput: {month: 'short', year: 'numeric', day: 'numeric'}
   },
   display: {
       // dateInput: { month: 'short', year: 'numeric', day: 'numeric' },
       dateInput: 'input',
       // monthYearLabel: { month: 'short', year: 'numeric', day: 'numeric' },
       monthYearLabel: 'inputMonth',
       dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},
       monthYearA11yLabel: {year: 'numeric', month: 'long'},
   }
}

format-datepicker. html:

<mat-form-field>
  <input matInput placeholder="Select Date" [matDatepicker]="datepickerRef" name="datepicker" ngModel #dateCtrl="ngModel" required readonly/>
  <mat-datepicker-toggle [for]="datepickerRef" matSuffix></mat-datepicker-toggle>
  <mat-datepicker #datepickerRef></mat-datepicker>
  <mat-error *ngIf="dateCtrl.errors?.required && deptCtrl.touched">Choose date</mat-error>
  </mat-form-field>

и в моем app.component.ts:

import {DateAdapter, MAT_DATE_FORMATS} from '@angular/material/core';
import { AppDateAdapter, APP_DATE_FORMATS } from '../format-datepicker/format-datepicker.component';

@Component({
  selector: 'app-my selector',
  templateUrl: './my page.html',
  styleUrls: ['./my page.css'],
  providers: [
    {provide: DateAdapter, useClass: AppDateAdapter},
    {provide: MAT_DATE_FORMATS, useValue: APP_DATE_FORMATS}
  ]
})
0 голосов
/ 18 февраля 2020

Вы можете использовать Момент. js с помощью DatePicker для материала и установить соответствующие параметры, как показано ниже

@NgModule({
imports: [MatDatepickerModule, MatMomentDateModule],
providers: [
  { provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } }
]
})

Более подробную информацию можно получить по адресу: https://material.angular.io/components/datepicker/overview#choosing -a-date-creation- и-дата-формат-настройки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...