Я посмотрел, как вернуть номер недели в Angular 2. Я не нашел ответа на этот вопрос. Я нашел на https://docs.angularjs.org/api/ng/filter/date что в Angular 1 это будет примерно так: {{today | date:'w'}}
но, похоже, это не работает в Angular 2. Я знаю, что могу написать функцию, которая позаботится об этом, но это не кажется практичным. Я что-то упустил в документации об Angular 2 или это (пока) там не реализовано?
угловой 2 номер недели канала даты
Ответы (4)
DatePipe в настоящее время не поддерживает weekOfYear
.
Однако вы можете реализовать свой собственный канал WeekOfYear
.
См. https://angular.io/docs/ts/latest/guide/pipes.html для более подробной информации.
Как предполагает Гюнтер, написать свой собственный довольно просто.
Создайте новый файл машинописного текста, 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();
в вашем компоненте.
Неделя года и неделя месяца поддерживаются в DatePipe в Angular 7:
https://angular.io/api/common/DatePipe
Редактировать: опечатка, о которой я упоминал здесь, была исправлена.
У меня нет репутации, чтобы комментировать пример Патрика, но я хочу заявить, что это опечатка:
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()».
today
этоDate
илиstring
? Насколько я знаю, в настоящее время это должно бытьDate
, чтобы трубаdate
работала. - person Günter Zöchbauer   schedule 18.02.2016