如何使用 angular datepipe 从数字中获取月份名称
How to get monthname from number using angular datepipe
我想使用 angular 的日期管道显示包含(本地化)月份名称的下拉菜单。
<select>
<option *ngFor="let month of months;" value="{{month}}">
{{month | date: 'MMMM'}}
</option>
</select>
months
是一个从 0 到 11 的数组。
生成的选项具有正确的值,但始终是 'January'
<select>
<option value="0"></option>
<option value="1"> January</option>
<option value="2"> January</option>
<option value="3"> January</option>
<option value="4"> January</option>
<option value="5"> January</option>
<option value="6"> January</option>
<option value="7"> January</option>
<option value="8"> January</option>
<option value="9"> January</option>
<option value="10"> January</option>
<option value="11"> January</option>
</select>
我的代码有问题吗?或者根本不可能使用 angular 的日期管道实现我想要的?如果是这样,我该如何完成?
月份必须是日期数组,可以使用
months=[0,1,2,3,4,5,6,7,8,9,10,11].map(x=>new Date(2000,x,2))
并且(看到我将 [value] 更改为 [value]="i")
<select>
<option *ngFor="let month of months;let i=index" [value]="i">
{{month | date: 'MMMM'}}
</option>
</select>
您可以从 Angular documentation 中看到,日期管道的输入是以下之一:
The date expression: a Date object, a number (milliseconds since UTC epoch), or an ISO string
因此,您输入的 0-11 被解释为 1970 年 1 月 01 日之后的毫秒数。因此,它们都是在 1 月。
您可能应该创建一个 Date 对象数组以用作 months[].
我发现自己在我的应用程序中经常生成数组,以至于我创建了一个 to
管道:
export class ToPipe implements PipeTransform {
transform(value: number, args?: number): number[] {
const ret = [];
for (let i = value; i <= args ; i++) {
ret.push(i);
}
return ret;
}
}
Angular's date pipe 接受可以在 html 中构造的日期字符串。我发现它更具可读性,并且不会用静态数组弄乱我的打字稿:
<select>
<option *ngFor="let monthNum of 1 | to : 12" [value]="monthNum">{{('2020-' + monthNum + '-01') | date: 'MMM'}}</option>
</select>
我想使用 angular 的日期管道显示包含(本地化)月份名称的下拉菜单。
<select>
<option *ngFor="let month of months;" value="{{month}}">
{{month | date: 'MMMM'}}
</option>
</select>
months
是一个从 0 到 11 的数组。
生成的选项具有正确的值,但始终是 'January'
<select>
<option value="0"></option>
<option value="1"> January</option>
<option value="2"> January</option>
<option value="3"> January</option>
<option value="4"> January</option>
<option value="5"> January</option>
<option value="6"> January</option>
<option value="7"> January</option>
<option value="8"> January</option>
<option value="9"> January</option>
<option value="10"> January</option>
<option value="11"> January</option>
</select>
我的代码有问题吗?或者根本不可能使用 angular 的日期管道实现我想要的?如果是这样,我该如何完成?
月份必须是日期数组,可以使用
months=[0,1,2,3,4,5,6,7,8,9,10,11].map(x=>new Date(2000,x,2))
并且(看到我将 [value] 更改为 [value]="i")
<select>
<option *ngFor="let month of months;let i=index" [value]="i">
{{month | date: 'MMMM'}}
</option>
</select>
您可以从 Angular documentation 中看到,日期管道的输入是以下之一:
The date expression: a Date object, a number (milliseconds since UTC epoch), or an ISO string
因此,您输入的 0-11 被解释为 1970 年 1 月 01 日之后的毫秒数。因此,它们都是在 1 月。 您可能应该创建一个 Date 对象数组以用作 months[].
我发现自己在我的应用程序中经常生成数组,以至于我创建了一个 to
管道:
export class ToPipe implements PipeTransform {
transform(value: number, args?: number): number[] {
const ret = [];
for (let i = value; i <= args ; i++) {
ret.push(i);
}
return ret;
}
}
Angular's date pipe 接受可以在 html 中构造的日期字符串。我发现它更具可读性,并且不会用静态数组弄乱我的打字稿:
<select>
<option *ngFor="let monthNum of 1 | to : 12" [value]="monthNum">{{('2020-' + monthNum + '-01') | date: 'MMM'}}</option>
</select>