угловой 2 номер недели канала даты

Я посмотрел, как вернуть номер недели в Angular 2. Я не нашел ответа на этот вопрос. Я нашел на https://docs.angularjs.org/api/ng/filter/date что в Angular 1 это будет примерно так: {{today | date:'w'}} но, похоже, это не работает в Angular 2. Я знаю, что могу написать функцию, которая позаботится об этом, но это не кажется практичным. Я что-то упустил в документации об Angular 2 или это (пока) там не реализовано?


person JanVanHaudt    schedule 18.02.2016    source источник
comment
today это Date или string? Насколько я знаю, в настоящее время это должно быть Date, чтобы труба date работала.   -  person Günter Zöchbauer    schedule 18.02.2016
comment
Сегодня это просто переменная, которую я создал, чтобы облегчить жизнь. как в: var сегодня = новая дата ();   -  person JanVanHaudt    schedule 18.02.2016


Ответы (4)


DatePipe в настоящее время не поддерживает weekOfYear.

Однако вы можете реализовать свой собственный канал WeekOfYear.
См. https://angular.io/docs/ts/latest/guide/pipes.html для более подробной информации.

person Günter Zöchbauer    schedule 18.02.2016

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

Создайте новый файл машинописного текста, 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(value).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(); в вашем компоненте.

person Patrick    schedule 28.09.2016

Неделя года и неделя месяца поддерживаются в DatePipe в Angular 7:

https://angular.io/api/common/DatePipe

person Sisyphus40    schedule 28.03.2019

Редактировать: опечатка, о которой я упоминал здесь, была исправлена.

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

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();
    }
}

Отметьте параметр «value», который передается в «moment()».

person Kenny    schedule 22.12.2017