En AngularJS, puedo usar filtros (tuberías) dentro de servicios y controladores usando una sintaxis similar a esta:
$filter('date')(myDate, 'yyyy-MM-dd');¿Es posible usar tuberías en servicios/componentes como este en Angular?
Como es habitual en Angular, puede confiar en la inyección de dependencia:
import { DatePipe } from '@angular/common'; class MyService { constructor(private datePipe: DatePipe) {} transformDate(date) { return this.datePipe.transform(date, 'yyyy-MM-dd'); } } Agregue DatePipe a su lista de proveedores en su módulo; si olvida hacer esto, obtendrá un error no provider for DatePipe :
providers: [DatePipe,...] Actualizar Angular 6 : Angular 6 ahora ofrece prácticamente todas las funciones de formato utilizadas por las tuberías públicamente. Por ejemplo, ahora puede usar la función formatDate directamente.
import { formatDate } from '@angular/common'; class MyService { constructor(@Inject(LOCALE_ID) private locale: string) {} transformDate(date) { return formatDate(date, 'yyyy-MM-dd', this.locale); } } Antes de Angular 5 : tenga en cuenta que DatePipe dependía de la API Intl hasta la versión 5, que no es compatible con todos los navegadores (consulte la tabla de compatibilidad ).
Si está utilizando versiones anteriores de Angular, debe agregar el polyfill Intl a su proyecto para evitar cualquier problema. Consulte esta pregunta relacionada para obtener una respuesta más detallada.
recomiendo usar el enfoque DI de otras respuestas en lugar de este enfoque
Deberías poder usar la clase directamente.
new DatePipe().transform(myDate, 'yyyy-MM-dd');Por ejemplo
var raw = new Date(2015, 1, 12); var formatted = new DatePipe().transform(raw, 'yyyy-MM-dd'); expect(formatted).toEqual('2015-02-12');Sí, es posible mediante el uso de una tubería personalizada simple. La ventaja de usar una canalización personalizada es que si necesitamos actualizar el formato de fecha en el futuro, podemos ir y actualizar un solo archivo.
import { Pipe, PipeTransform } from '@angular/core'; import { DatePipe } from '@angular/common'; @Pipe({ name: 'dateFormatPipe', }) export class dateFormatPipe implements PipeTransform { transform(value: string) { var datePipe = new DatePipe("en-US"); value = datePipe.transform(value, 'MMM-dd-yyyy'); return value; } } {{currentDate | dateFormatPipe }}Siempre puede usar esta tubería en cualquier lugar, componente, servicios, etc.
Por ejemplo:
export class AppComponent { currentDate : any; newDate : any; constructor(){ this.currentDate = new Date().getTime(); let dateFormatPipeFilter = new dateFormatPipe(); this.newDate = dateFormatPipeFilter.transform(this.currentDate); console.log(this.newDate); }No te olvides de importar dependencias.
import { Component } from '@angular/core'; import {dateFormatPipe} from './pipes'