Формат вывода ngx- bootstrap datepicker не является форматом ISO - PullRequest
1 голос
/ 03 августа 2020

Формат вывода по умолчанию ngx- bootstrap datepicker не является форматом ISO, как описано в документации. Я бы приветствовал этот формат, но фактический формат, который я получаю:

Sun 2 августа 2020 19:17:00 GMT-0400 (восточное летнее время)

Пример Stackblitz

Я знаю, что есть способы опубликовать формат, но этот формат кажется странным для формата вывода по умолчанию. У кого-нибудь есть опыт с этим?

1 Ответ

0 голосов
/ 03 августа 2020

В vanilla JavaScript есть объект ' Date ', вывод которого по умолчанию дает вам строку, которую вы видите:

Sun Aug 02 2020 19:17:00 GMT-0400 (Eastern Daylight Time)

В физической памяти ваша Дата объект на самом деле сохраняется как количество миллисекунд с « 1 января 1970, 00: 00: 00 », что с использованием нашей приведенной выше строки на самом деле составляет « 1596410220000 » миллисекунд.

Вы можете прочитать полные спецификации для объекта ' Date ' здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Numbers_and_dates

Между тем, , чтобы ответить на ваш вопрос более конкретно , ваше средство выбора даты не выдает вывод, который вы указали, а вместо этого применяет свою дату к объекту ' Date ' ( newDate ). Затем вы устанавливаете другой объект ' Date ' ( updatedDate ), чтобы он был равен объекту Date, назначенному вашим средством выбора даты ( newDate ).

Это делается здесь:

onValueChange(newDate: Date) {
    this.updatedDate = newDate;
}

Итак, в памяти ваш updatedDate теперь представлен как « 1596410220000 » миллисекунд. Когда вы выводите этот объект ' Date ' на свой HTML, ваш браузер будет использовать вывод по умолчанию для объекта ' Date ', что даст вам:

Sun Aug 02 2020 19:17:00 GMT-0400 (Eastern Daylight Time)

Итак, есть два решения, которые вы можете использовать, если хотите получить эту дату в другом формате.

Сначала вы можете вызвать метод для вашего newDate, чтобы вернуть другую отформатированную строку. Например, если мы хотим вывести его как строку ISO, которую вы искали изначально , мы изменим это :

export class AppComponent implements OnInit  {
  myDateValue: Date;
  updatedDate: Date;

  ngOnInit() {
    this.myDateValue = new Date();
  }

  onValueChange(newDate: Date) {
    this.updatedDate = newDate;
  }

На это:

export class AppComponent implements OnInit  {
  myDateValue: Date;
  updatedDate: String;

  ngOnInit() {
    this.myDateValue = new Date();
  }

  onValueChange(newDate: Date) {
    this.updatedDate = newDate.toISOString();
  }

Сначала мы изменили « updatedDate » на строковый объект и вызвали метод « toISOString ()"на нашей" newDate"(которая является датой, возвращаемой нашим средством выбора даты). Это дает нам строку в формате ISO, которая для нашего примера:

2020-08-02T23:17:00.000Z

Другой вариант - просто применить форматирование к вашей дате в вашем angular DatePipe. Например, , если мы изменим это:

</div>
   Updated Date: {{updatedDate}}
</div>

На это:

</div>
   Updated Date: {{updatedDate | date:"shortTime"}}
</div>

Мы бы применили формат shortTime, который представляет собой «ч: мм a» или, в нашем примере:

7:17 PM

Полный список форматов даты angular можно прочитать здесь: https://angular.io/api/common/DatePipe

Подводя итог:

Vanilla JavaScript (не angular или ngx- bootstrap) контролирует выходной формат для « Date * 1095. * "объект здесь. Хотя результат выглядит странно, сама переменная хранится не в этом формате, а в миллисекундах (UNIX эпоха ). Вы можете вызывать методы объекта Date, чтобы получить различные форматы (включая ISO, UT C, et c), или вы можете отформатировать его из angular, передав команду форматирования в строке даты.

...