#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