Угловая дата «ГГГГ» не совпадает с «полной»

#angular

Вопрос:

Я пытаюсь распечатать месяц и год из простой строки, предоставленной API. До сих пор это было правильно, но для Jan 1st 2022 этого печатается 2021 год. Я запускаю это в Новой Зеландии, где это происходит в настоящее GMT 12 время , но будет 13 происходить каждое 1 января

Как видно из приведенного ниже примера, это будет правильно в 2020 и 2023 годах, но не в 2021 и 2022 годах

Ввод

 {{ '2020-01-01' | date : 'full' }} | {{ '2020-01-01' | date : 'MMM YYYY'}}
{{ '2021-01-01' | date : 'full' }} | {{ '2021-01-01' | date : 'MMM YYYY'}}
{{ '2022-01-01' | date : 'full' }} | {{ '2022-01-01' | date : 'MMM YYYY'}}
{{ '2023-01-01' | date : 'full' }} | {{ '2023-01-01' | date : 'MMM YYYY'}}
 

Выход

 Wednesday, January 1, 2020 at 12:00:00 AM GMT 13:00 Jan 2020
Friday, January 1, 2021 at 12:00:00 AM GMT 13:00    Jan 2020
Saturday, January 1, 2022 at 12:00:00 AM GMT 13:00  Jan 2021
Sunday, January 1, 2023 at 12:00:00 AM GMT 13:00    Jan 2023
 

Комментарии:

1. Я считаю, что это связано с настройками браузера. Можете ли вы проверить это в разных браузерах? вы все еще получаете те же результаты?

Ответ №1:

Быстро исправлена ваша проблема в том, что просто измените YYYY yyyy , и все будет в порядке. Но обратите внимание, что на основании официальной документации формат письма за год y не Y указан .

YYYY формат года с нумерацией недель (4 цифры или более ноль с дополнением), например 0002, 0020, 0201, 2017, 20173 .

 <h3>{{ '2020-01-01' | date : 'full' }} | {{ '2020-01-01' | date : 'MMM yyyy'}}</h3>
<h3>{{ '2021-01-01' | date : 'full' }} | {{ '2021-01-01' | date : 'MMM yyyy'}}</h3>
<h3>{{ '2022-01-01' | date : 'full' }} | {{ '2022-01-01' | date : 'MMM yyyy'}}</h3>
<h3>{{ '2023-01-01' | date : 'full' }} | {{ '2023-01-01' | date : 'MMM yyyy'}}</h3>
 

И результат:

 Wednesday, January 1, 2020 at 12:00:00 AM GMT 03:30 | Jan 2020
Friday, January 1, 2021 at 12:00:00 AM GMT 03:30 | Jan 2021
Saturday, January 1, 2022 at 12:00:00 AM GMT 03:30 | Jan 2022
Sunday, January 1, 2023 at 12:00:00 AM GMT 03:30 | Jan 2023
 

Раздвоенный стэкблиз

Но лучший подход-использовать название каждого формата:

 'short': equivalent to 'M/d/yy, h:mm a' (6/15/15, 9:03 AM).
'medium': equivalent to 'MMM d, y, h:mm:ss a' (Jun 15, 2015, 9:03:01 AM).
'long': equivalent to 'MMMM d, y, h:mm:ss a z' (June 15, 2015 at 9:03:01 AM GMT 1).
'full': equivalent to 'EEEE, MMMM d, y, h:mm:ss a zzzz' (Monday, June 15, 2015 at 9:03:01 AM GMT 01:00).
'shortDate': equivalent to 'M/d/yy' (6/15/15).
'mediumDate': equivalent to 'MMM d, y' (Jun 15, 2015).
'longDate': equivalent to 'MMMM d, y' (June 15, 2015).
'fullDate': equivalent to 'EEEE, MMMM d, y' (Monday, June 15, 2015).
'shortTime': equivalent to 'h:mm a' (9:03 AM).
'mediumTime': equivalent to 'h:mm:ss a' (9:03:01 AM).
'longTime': equivalent to 'h:mm:ss a z' (9:03:01 AM GMT 1).
'fullTime': equivalent to 'h:mm:ss a zzzz' (9:03:01 AM GMT 01:00).
 

Ответ №2:

Вы можете использовать дату сборки таким образом:

Демодировать.ts

 export class AppComponent  {
  newDate = new Date();
}
 

demoDate.html

 <h3>{{ newDate | date: 'MMMM yyyy'}}</h3>
<h3>{{ newDate | date: 'MM/yyyy'}}</h3>
<h3>{{ newDate | date: 'dd/MMMM/yyyy'}}</h3>
<h3>{{ newDate | date: 'dd/MM/yyyy'}}</h3>
 

Более подробную информацию о форме вы можете посетить https://angular.io/api/common/DatePipe

Вот ссылка на пример стекблитца Ссылка на пример

Ответ №3:

Проблема в том, что вы использовали формат года с нумерацией недель YYYY .

YYYY Представляет год с нумерацией недель, здесь, я думаю, вам не нужен год с нумерацией недель, поэтому вы можете просто использовать yyyy .

формат ГГГГ против гггг документ

Обновить

 YYYY
 

в нижнем регистре будет решена проблема.

 yyyy
 

Нравится:

 {{ '2022-01-01' | date : 'MMM yyyy'}}
 

Год нумерации недель также неофициально называется годом ISO