Расширение Angular DatePipe для поддержки часовых поясов
Недавно я исследовал, как лучше всего анализировать даты в часовом поясе пользователя на Angular V5.
Но кажется, что сокращения часовых поясов устарели, и вы можете использовать только параметр часового пояса с конвейером DatePipe, но на самом деле это просто номер смещения часового пояса, который подвержен неправильному анализу из-за перехода на летнее время.
(например, может быть разный номер смещения для одного и того же часового пояса в зависимости от времени года)
Поэтому я делюсь пользовательским pipe, который использует момент и часовой пояс для расширения DatePipe с возможностью поддержки сокращений часовых поясов («Europe/Prague» и т.д.).
Надеюсь, вы найдете это полезным, и наслаждайтесь правильным форматированием даты часового пояса :)
import { Pipe, PipeTransform } from '@angular/core';
import { DatePipe } from '@angular/common';
import * as moment from 'moment-timezone';
/**
* Канал текущего часового пояса для поддержки анализа на основе сокращений часового пояса
* охватывает все случаи изменения смещения из-за перехода на летнее время.
*
* Тот же API, что и у DatePipe с дополнительной поддержкой сокращений часовых поясов.
*/
@Pipe({
name: 'momentDate'
})
export class MomentDatePipe extends DatePipe implements PipeTransform {
transform(
value: string | Date,
format: string = 'mediumDate',
timezone: string = 'Europe/Prague'
): string {
const timezoneOffset = moment(value).tz(timezone).format('Z');
return super.transform(value, format, timezoneOffset);
}
}