2016-02-18 5 views
2

Я искал, как вернуть номер недели в Angular 2. Я не нашел ответа на этот вопрос. Я нашел на , что в Угловом 1 это было бы примерно так: {{today | date:'w'}}, но это не работает в Angular 2. Я знаю, что могу написать функцию, чтобы позаботиться об этом, но это не кажется практичным. Я что-то пропустил в документации об Angular 2 или это еще не реализовано?угловая 2 date pipe weeknumber

+0

является 'сегодня'' 'Date' или' string'? AFAIK в настоящее время он должен быть 'Date' для работы' date' для работы. –

+0

Сегодня это просто переменная, которую я создал, чтобы облегчить жизнь. как в: var today = new Date(); – JanVanHaudt

ответ

4

Как предлагает Гюнтер, написать свое собственное довольно просто.

Создать новый файл машинопись, week.pipe.ts

import { Pipe, PipeTransform } from '@angular/core'; 

@Pipe({ name: 'week' }) 
export class WeekPipe implements PipeTransform { 
    transform(value: Date): number { 
     return this.getWeekNumber(value); 
    } 

    // source: http://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php 
    private getWeekNumber(d: Date): number { 
     // Copy date so don't modify original 
     d = new Date(+d); 
     d.setHours(0, 0, 0); 
     // Set to nearest Thursday: current date + 4 - current day number 
     // Make Sunday's day number 7 
     d.setDate(d.getDate() + 4 - (d.getDay() || 7)); 
     // Get first day of year 
     var yearStart = new Date(d.getFullYear(), 0, 1); 
     // Calculate full weeks to nearest Thursday 
     var weekNo = Math.ceil((((d.valueOf() - yearStart.valueOf())/86400000) + 1)/7); 
     // Return array of year and week number 
     return weekNo; 
    } 
} 

Если вы используете тот момент, когда код еще проще

import { Pipe, PipeTransform } from '@angular/core'; 
import * as moment from 'moment'; 

@Pipe({ name: 'week' }) 
export class WeekPipe implements PipeTransform { 
    transform(value: Date): number { 
     return moment(d).week(); 
    } 
} 

включают трубу в вашем app.module

import { NgModule } from '@angular/core'; 
import { WeekPipe } from './pipes/week.pipe'; 
@NgModule({ 
    imports: [ 
     // your imports 
    ], 
    declarations: [ 
     AppComponent, 
     WeekPipe  // including the pipe in declarations 
    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 

И тогда вы можете использовать его в своем HTML как обычно

<div class="week-number"> 
    {{ yourDate | week }} 
</div> 

, где yourDate является public yourDate: Date = new Date(); в вашем компоненте.

0

У меня нет репутации комментировать на примере Патрика, но я хочу сказать, что есть опечатка:

import { Pipe, PipeTransform } from '@angular/core'; 
import * as moment from 'moment'; 

@Pipe({ name: 'week' }) 
export class WeekPipe implements PipeTransform { 
    transform(value: Date): number { 
     return moment(value).week(); 
    } 
} 

Отметьте параметр «значение», который передается на «момент()» ,

Смежные вопросы