Практическое руководство: преобразование формата даты из /Date(xxxxxxxxxx)/ в пользовательский формат в Angular 2+

Проблема

Иногда во время разработки мы сталкиваемся с проблемами при форматировании файла. Date в Angular, который мы получаем со стороны сервера в результате вызова REST api.

В случае ASP .NET MVC мы можем создать контроллер с методом действия, который возвращает JsonResult (Официальная документация), а затем вызовите этот метод действия из Angular как API REST. Однако, если есть какое-либо свойство с типом System.DateTime в ответе json от API REST мы получаем дату в следующем формате:

/Дата(хххххххххххх)/

Обычно этот тип формата возвращается сериализатором .NET MVC json при сериализации. DateTime значение в формате JSON. Эта проблема не существует в WEB API 2, поскольку веб-API использует JSON.NET для сериализации DateTime, когда мы возвращаемся HTTP отклик. Не существует готового решения для преобразования этой даты в нашу собственную Date формат в Angular, используя встроенный DatePipe углового.

Поэтому нам нужно создать собственный канал в Angular для форматирования даты из /Дата(хххххххххххх)/ отформатируйте объект даты json с часовым поясом. Тогда мы можем использовать встроенный DatePipe angular, чтобы получить требуемый формат без разделения даты. Вот код для пользовательской трубы —

Решение

Пользовательский код канала даты

обычай-date.pipes.ts

import { Pipe, PipeTransform } from '@angular/core';
/*
 * Formats a /Date(xxxxxxxxxxxxx)/ into a JSON Date object
 * Takes an argument as input of actual date value in /Date(xxxxxxxxxxxxx)/ format.
 * Usage:
 *   date-value | customDateFormat
 * Example:
 *   {{ '/Date(1402034400000)/' | customDateFormat}}
*/
@Pipe({name: 'customDateFormat'}  )
export class CustomDateFormat implements PipeTransform {
  transform(value: any): Date {
       var customDate = new Date(value.match(/\d+/)[0] * 1);  
       return  customDate;
  }
}

Нам нужно импортировать этот пользовательский канал в наш корневой модуль (app.module.ts) также .

Пример кода компонента

app.component.ts

import { Component } from '@angular/core';
import {DatePipe} from '@angular/common'

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  name="Angular 5";
  originalDate:string = '/Date(1524210579389)/';
}

Использование в HTML-шаблоне

app.component.html

<p>Original date: {{originalDate}}</p> <br>
<p>Custom date: {{originalDate | customDateFormat|date :'short'}}

Здесь мы использовали встроенный date :'short' pipe для повторного форматирования результата.

Вот конечный результат —

Custom date: 4/20/18, 1:19 PM

Образец рабочей демонстрации доступен ниже —

Демонстрация пользовательской трубы

Этот пример применим для Angular 2,4 и любых более поздних версий Angular. Однако мы можем создать эквивалентный пользовательский фильтр и в angular.js.

Удачного кодирования !!

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *