3

我查找了如何在 Angular 2 中返回周数。我还没有找到这个问题的答案。我确实在https://docs.angularjs.org/api/ng/filter/date上发现在 Angular 1 中它会是这样的:{{today | date:'w'}}但这似乎在 Angular 2 中不起作用。我知道我可以编写一个函数照顾这个,但这似乎不切实际。我是否在有关 Angular 2 的文档中遗漏了某些内容,或者这是否(尚未)在那里实现?

4

4 回答 4

9

正如 Günter 所建议的,编写自己的代码非常简单。

创建一个新的打字稿文件,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;
    }
}

如果您正在使用 moment 代码会更容易

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>

其中 yourDatepublic yourDate: Date = new Date();在您的组件中是一个。

于 2016-09-28T13:20:03.413 回答
3

编辑:我在这里提到的错字已经修复。

我没有评论帕特里克的例子的声誉,但我想说有一个错字:

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

标记传递给“moment()”的“value”参数。

于 2017-12-22T08:41:12.680 回答
3

Angular 7 中的 DatePipe 支持一年中的一周和一个月的一周:

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

于 2019-03-28T08:25:21.843 回答
1

DatePipe当前不支持weekOfYear.

不过,您可以实现自己的WeekOfYear管道。
有关更多详细信息,请参阅https://angular.io/docs/ts/latest/guide/pipes.html

于 2016-02-18T07:23:35.443 回答