Angular 4 Date Pipe конвертируется неправильно
У меня есть служба отдыха, которая возвращает коллекцию объектов, и одним из полей элемента является строка даты (формат ISO-8601) и значение даты следующим образом
"createDate": "2017-02-21T12:56:50.907",
В пользовательском интерфейсе angular4 я поставил DatePipe для форматирования вышеуказанной даты
{{resultItem.createdDate| дата:'короткие'}}
и я получаю неправильное преобразование следующим образом 21.02.2017, 7:56
вместо 21.02.2017, 0:56
6 ответов
Вам может понадобиться создать дату UTC из вашей даты с часовым поясом... Я предполагаю, что вы находитесь в тихом часовом поясе, так как время UTC составляет 7 часов...
Попробуйте этот код, чтобы получить новый объект даты без часового пояса (при условии, что ваша переменная называется "дата"):
var datewithouttimezone = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
Я решил проблему, добавив пользовательский канал.
Мой заказной канал основан на решении, предоставленном Birwin. Спасибо, Бирвин.
Вот мой пользовательский канал с именем UtcDate
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'utcDate'
})
export class UtcDatePipe implements PipeTransform {
transform(value: string): any {
if (!value) {
return '';
}
const dateValue = new Date(value);
const dateWithNoTimezone = new Date(
dateValue.getUTCFullYear(),
dateValue.getUTCMonth(),
dateValue.getUTCDate(),
dateValue.getUTCHours(),
dateValue.getUTCMinutes(),
dateValue.getUTCSeconds()
);
return dateWithNoTimezone;
}
}
И я также использовал трубу даты по умолчанию для форматирования
{{createdDate | utcDate | date:'short'}}
Вы можете передать другой параметр в трубу даты следующим образом:
{{resultItem.createdDate | date: 'short': 'UTC'}}
Этот параметр может быть как часовой пояс '-0430'
или просто 'GMT'
См. Документацию: https://docs.angularjs.org/api/ng/filter/date
В этом сценарии я использовал moment.js. у меня это сработало. Угловая версия - 8
import { Pipe, PipeTransform } from '@angular/core';
import * as moment from 'moment';
@Pipe({
name: 'utcDate'
})
export class UtcDatePipe implements PipeTransform {
transform(value: string): any {
if (!value) {
return '';
}
const dateWithNoTimezone = new Date(moment.utc(value).format());
return dateWithNoTimezone;
}
}
HTML:
<small class="text-muted ml-auto">{{n.createdAt | utcDate | date :'dd/MM/yyyy h:mm a '}}</small>
используйте эти:
в вашем компоненте:
import * as moment from 'moment';
на странице html
{{resultItem.createdDate | date : 'MM/dd/yyyy HH:mm': 'UTC' }}
Добавьте приведенный ниже код в html файл,
{{значение | date:'short':'+0000'}}
преобразует время utc в местное время